结合智慧卡的ECDSA数位签章软体设计与实现Word文档下载推荐.docx
《结合智慧卡的ECDSA数位签章软体设计与实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《结合智慧卡的ECDSA数位签章软体设计与实现Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
表一 相同安全性時,RSA與ECC金鑰長度比較(NIST,2003)
安全性
演算法
280
2112
2128
2192
2256
RSA金鑰長度(bits)
1024
2048
3072
7680
15360
ECC金鑰長度(bits)
160
224
256
384
512
金鑰長度比
6:
1
9:
12:
20:
30:
本研究目的在於發展一個結合智慧卡的ECDSA數位簽章軟體,我們使用JavaCard作為ECC金鑰存取媒介,並透過軟體產生ECDSA數位簽章,其中產生與檢驗簽章過程會用到的雜湊函數演算法,則採用SHA-2演算法。
使用者可以將持有的JavaCard視為鑰匙環,其中除存放本身的公開金鑰與秘密金鑰外,還可存放通訊對方的公開金鑰,藉此與他人進行安全通訊時,用以確認其身份及所傳送訊息的完整性。
貳、文獻探討
一、橢圓曲線密碼學(EllipticCurveCryptography)
(一)、橢圓曲線密碼學原理簡介
橢圓曲線的密碼學技術不僅可以用於數位簽章、金鑰交換及加解密,還可應用在大數分解(Factorization)與質數判斷(Primalitytesting)。
橢圓曲線的通用方程式如下:
y2+a1xy+a3y=x3+a2x2+a4x+a6
(1)
密碼學的橢圓曲線是由滿足該方程式的所有點(x,y)及一個無限遠點(Pointatinfinity)O所形成的集合,座標x與y屬於某個有限體(finitefield)。
目前軟硬體具體實現的有限體為質數體(Primefield,GF(p))、二元體(Binaryfield,GF(2n))、最佳擴展體(Optimalextensionfield,GF(pn))等三種(BaileyandPaar,2001)。
橢圓曲線上的點可進行兩點間之加法(Menezes,1993;
SilvermanandTate,1992)。
幾何上,如果要計算相異兩點P與Q的和,則先找出通過這兩點的直線,然後找出這條直線與橢圓曲線相交的第三點(-R),再將此點對x軸做鏡射得到和(R),如圖一所示。
如果橢圓曲線上的某兩點共線的話,兩點相加之和就是O。
圖一 橢圓曲線幾何圖表示兩點加法
若P=(x1,y1)與Q=(x2,y2)為橢圓曲線上的任意兩點,而P≠O≠Q,且選取質數體,此時橢圓曲線方程式為:
y2=x3+ax+b
(2)
兩點加法的運算規則如下所示:
(3)
如果選擇二元體,則橢圓曲線方程式為:
y2+xy=x3+ax2+b
(4)
而上述公式(3)的加法規則3必須改為:
(5)
公式(3)與(5)的計算(加法、減法、乘法、除法/反元素)必須在相關的有限體進行,若選取質數體時僅需進行模算術(Modulararithmetic),若選取二元體則需進行多項式算術(Polynomialarithmetic)。
點乘法計算k˙P為橢圓曲線密碼系統的基礎,其中k為正整數,而P為橢圓曲線上的一個點:
(6)
如果n˙P=O則n為點P的級數(order)。
在合適的橢圓曲線上,可以找到ㄧ個級數n>
2160的基點(Basepoint)G,而此橢圓曲線系統參數基點G可公開;
另隨機選取小於n的正整數d當作私密金鑰,計算Q=d˙G為對應的公開金鑰。
點乘法的計算如果直接做k個點相加,則需要執行k-1次加法運算,效率不佳,目前已有許多可以加速點乘法計算的演算法。
本研究所開發的橢圓曲線密碼模組則是採用NAF(Non-AdjacentForm)演算法。
橢圓曲線密碼系統的實現必須考慮下列因素:
1.有限體的選擇
2.橢圓曲線的挑選
3.有限體元素的運算(加法、減法、乘法、除法/反元素)
4.橢圓曲線點的運算(加法、減法、乘法)
美國ANSIX9.62(ANSI,1998)與FIPS186-2(NIST,2001)標準中針對質數體與二元體建議不同長度的橢圓曲線與合適的基點,所以有關橢圓曲線的參數挑選可參考該標準。
網際網路上,有許多關於橢圓曲線運算的開放原始碼軟體,如:
LiDIA、PARI-GP、OpenSSL或Crypto++…等,可作為橢圓曲線密碼系統開發的參考。
(二)、橢圓曲線數位簽章演算法(ECDSA)
在ECDSA相關標準ANSIX9.62(ANSI,1998)與FIPS186-2(NIST,2001)中提及對於訊息m的數位簽章(r,s)產生步驟如下:
1.
2.
,則回到步驟1
3.
4.如果s=0,則回到步驟1
而檢驗ECDSA簽章是否正確的步驟如下:
4.若且唯若v=r,則簽章正確
ECDSA簽章產生時至少須進行一次點乘法以及一些模算術,簽章檢驗時則進行兩次點乘法以及一些模算術。
表二為RSA與ECDSA用於數位簽章的比較,從表二可見相同安全性時,兩種演算法所產生出來的簽章長度差異甚大,這將影響簽章傳遞的時間與儲存的空間。
表二 數位簽章演算法RSA與ECDSA的比較
RSA
ECDSA
簽章長度
•安全性2128:
384位元組
•安全性2192:
960位元組
•安全性2256:
1920位元組
64位元組(質數體)
96位元組(質數體)
132位元組(質數體)
安全基礎
大數分解
橢圓曲線離線對數
優點
歷史悠久,容易說明,亦可同時用以加解密。
速度快,簽章長度小。
缺點
速度慢,簽章長度較大。
理論不易理解,實現技術較複雜。
二、SHA-2雜湊函數演算法
數位簽章演算法的一般做法,會對欲傳輸的訊息以雜湊函數計算出一組訊息摘要,再以秘密金鑰將其加密後產生數位簽章,並一併與原始訊息傳送給對方。
接收方會將數位簽章以傳送方的公開金鑰解開取出訊息摘要,再將接收到的訊息以同樣的雜湊函數演算法計算出另一組訊息摘要,以進行比對,相同則表示資料未被竄改,如此則可驗證資料的完整性。
因此雜湊函數演算法對於數位簽章本身的安全性至為重要。
SHA(SecureHashAlgorithm)演算法是由美國國家標準技術研究院(NIST)所發展的,並且在1993年成為第180項聯邦處理標準(FIPSPUB180)。
目前最新的修訂版是FIPSPUB180-2,其中新增包含SHA-256、SHA-384及SHA-512等三種雜湊演算法,統稱為SHA-2演算法(NIST,2002)。
目前ECDSA實作較常用的是SHA-1演算法,然而NIST已宣佈將於2010年後不再支持處理流程類似於MD5且有安全疑慮的SHA-1(NIST,2005)。
因此我們選擇較新的SHA-2作為產生ECDSA數位簽章時使用的雜湊函數演算法。
三、JavaCard
JavaCard是一種標準的智慧卡,智慧卡在當今網路安全應用最重要的三個特點為:
確認性、保密性及便利性。
其內部有源於Java技術的JavaCard虛擬機器(JavaCardVirtualMachine,JCVM)及JavaCard執行環境(JavaCardRuntimeEnvironment,JCRE)。
此外,JavaCard尚提供一套具有物件導向程式設計特色的API(Ortiz,2003)。
本研究所開發的軟體中用以存取公開金鑰及秘密金鑰的JavaCard是IBMJCOP20卡,它完全符合VisaOpenPlatformCard架構及JavaCardAPI2.1.1版的規範。
參、軟體實作
一、ECDSA程式模組
我們使用自行開發的ECDSA數位簽章的簽章產生與檢驗程式模組,設計軟體的核心功能。
圖二及圖三分別是橢圓曲線參數為質數體的數位簽章產生模組及檢驗模組。
此外還有設計橢圓曲線參數為二元體的數位簽章相關模組,這些模組均已經使用ANSIX9.62(ECDSA)標準文件中所提供的測試樣本檢驗無誤(楊中皇,2005)。
圖二 ECDSA數位簽章產生模組(部分)
圖三 ECDSA數位簽章檢驗模組(部分)
二、應用流程設計
使用者必須先持有內建ECC金鑰存取程式的JavaCard,才能使用這套軟體。
第一次使用的時候必須先建立自己的ECC金鑰對,爾後可以匯出自己的及匯入他人的公開金鑰,以便與他人進行通訊時使用。
在執行任何有關數位簽章的動作之前,軟體本身就會檢查是否已經從卡片讀取到金鑰,金鑰是不允許使用者手動輸入的,如果沒有金鑰,軟體將不會執行數位簽章的產生與檢驗等相關功能。
應用本軟體的流程如圖四:
圖四 ECDSA數位簽章軟體的應用流程圖
操作的步驟說明如表三:
表三 ECDSA數位簽章軟體的應用流程說明
步驟
說明
將內建有ECC金鑰存取程式的JavaCard置入讀卡機。
2
讀取卡片之後,會要求使用者輸入PIN碼驗證,驗證成功後,才可繼續使用,驗證錯誤達三次即鎖卡。
第一次使用應建立自己的ECC金鑰對,這個部分還提供匯出入公開金鑰的功能。
本身的ECC金鑰亦可以更新置換,他人的公開金鑰則可更新或刪除,但置換金鑰會影響無法檢驗已建立的數位簽章。
3
以ECC秘密金鑰對檔案產生數位簽章。
可以同時對多個檔案進行批次產生簽章。
4
以自己或他人的ECC公開金鑰對數位簽章進行檢驗。
可以同時對多個檔案進行批次檢驗簽章。
5
退出JavaCard,結束所有作業,並清除軟體執行時暫存金鑰內容的變數值。
三、軟體使用簡介
(一)、操作介面說明
我們使用BorlandC++Builder6開發,它不僅能快速建立視窗介面,且能整合C/C++原始碼。
軟體主畫面如圖五所示:
圖五 軟體主畫面
主畫面大致劃分以下三個主要功能區塊說明:
(1)主選單及使用者名稱:
主選單有卡片功能、簽章功能等兩個子選單,以及設定與說明功能。
所有的功能亦可直接從畫面上的圖示按鈕點選執行,使用者名稱的欄位只有在卡片已連線並經驗證後,才會顯示。
(2)數位簽章功能區塊:
有三個分頁功能,分別是數位簽章的產生、檢驗以及記錄相關處理過程的日誌訊息。
(3)卡片及設定工具鈕:
與卡片存取有關的功能可以直接從這裡去點選執行,另外還有選項設定的功能,可以修改一些常用選項。
此區塊最上面的卡片狀態圖如果顯示彩色表示卡片目前連線使用中,若是黑白圖片則表示尚未置入卡片。
(二)、金鑰存取
金鑰的存取畫面(如圖六),主要有以下功能,使用前必須先勾選相關的使用者名稱:
(1)讀取:
讀出金鑰的內容,並儲存到軟體中的變數,以供後續使用。
(2)新增:
新增ECC金鑰對。
必須輸入使用者名稱及E-Mail,另外還需選擇金鑰長度,我們參考NIST的FIPS186-2標準,共提供五種質數體(P-XXX)及十種二元體(B-XXX、K-XXX)的金鑰參數,如圖七所示。
(3)匯出:
匯出自己的公開金鑰。
(4)匯入:
匯入他人的公開金鑰。
(5)移除:
移除勾選的使用者之金鑰。
圖六 ECC金鑰存取
圖七 新增ECC金鑰對
(三)、ECDSA簽章的產生與檢驗
無論是產生或檢驗數位簽章,都可以選取多個檔案執行,準備要用以產生數位簽章的檔案,或是要檢驗的數位簽章檔,均會列表供使用者瀏覽,如果某個檔案不欲執行相關動作,只要勾選取消即可,橢圓曲線數位簽章的副檔名我們使用預設為"
.ecsig"
,以便與坊間其他軟體所慣用的數位簽章檔名"
.sig"
作區別。
相關的範例畫面如圖八與圖九。
產生與檢驗簽章的處理過程會顯示在主畫面第三個分頁「日誌訊息」欄內,會記錄處理的日期時間與結果,如圖十所示。
圖八 選取欲產生數位簽章的檔案
圖九 選取欲檢驗的數位簽章檔
圖十 檢視處理過程的訊息
四、結論
雖然橢圓曲線密碼學早在1985年就有學者提出,然而迄今實務應用仍不普遍。
本研究以JavaCard為例,並使用自行設計的橢圓曲線密碼模組開發一個結合智慧卡且具有友善視窗使用介面的ECDSA數位簽章軟體,這不僅應證ECC的實務應用,同時還提供我們研究的思維與創新的契機。
根據對ECC相關文獻的探討,可知在相同的安全性之下,ECC所需的金鑰長度遠比RSA金鑰來得小,不僅如此,ECC還有更好的執行效率,故在可預見的未來,ECC的技術勢必將逐漸成為公開金鑰密碼系統的主流,同時亦將為電子商務交易提供品質更好、效率更佳的安全保障。
伍、參考文獻
ANSIX9.62,PublicKeyCryptographyfortheFinancialServicesIndustry:
TheEllipticCurveDigitalSignatureAlgorithm(ECDSA),1998.
A.Menezes,EllipticCurvePublicKeyCryptosystems,Kluwer,1993.
C.E.Ortiz,AnIntroductiontoJavaCardTechnology,http:
//developers.sun.
com/techtopics/mobility/javacard/articles/javacard1/,2003.
D.V.BaileyandC.Paar,Efficientarithmeticinfinitefieldextensionswithapplicationsinellipticcurvecryptograph,J.Cryptology,2001,Vol.14,No.3,pp.153-176.
IBM,JCOP20TechnicalBrief,
JCOP20Brief.pdf.
J.H.SilvermanandJ.Tate,RationalPointsonEllipticCurves,1992,UndergraduateTextsinMathematics,Springer-Verlag.
LiDIA,http:
//www.informatik.tu-darmstadt.de/TI/LiDIA/.
N.Koblitz,EllipticCurveCryptosystems,MathematicsofComputation,1987,Vol.48,No.177,pp.203-209.
NIST,DRAFTSpecialPublication800-57,RecommendationonKeyManagement,http:
//csrc.nist.gov/CryptoToolkit/kms/guideline-1-Jan03.pdf,2003.
NIST,FIPS186-2,DigitalSignatureStandard(DSS),http:
//csrc.nist.gov/
publications/fips/fips186-2/fips186-2-change1.pdf,2001.
NIST,FIPSPUB180-2,SecureHashStandard,http:
//csrc.nist.gov/publications/
fips/fips180-2/fips180-2withchangenotice.pdf,2002.
NIST,NISTBriefCommentsonRecentCryptanalyticAttacksonSHA-1,
http:
//csrc.nist.gov/hash_standards_comments.pdf,2005.
PARI/GP,http:
//pari.math.u-bordeaux.fr/.
TheOpenSSLProject,http:
//www.openssl.org/.
V.Miller,UseofEllipticCurvesinCryptography,InAdvancesinCryptology:
ProceedingsofCrypto'
85,1986,volume218ofLectureNotesinComputerScience,pp.417-426,Berlin,Springer-Verlag.
WeiDai,Crypto++library,
楊中皇,橢圓曲線密碼系統軟體實現技術之探討,資訊安全通訊,2005年1月,第11卷,第2期,頁15-25。