密碼學ecc是什麼意思
A. 密碼學的學科分類
Autokey密碼
置換密碼
二字母組代替密碼 (by Charles Wheatstone)
多字母替換密碼
希爾密碼
維吉尼亞密碼
替換式密碼
凱撒密碼
摩爾斯電碼
ROT13
仿射密碼
Atbash密碼
換位密碼
Scytale
Grille密碼
VIC密碼 (一種復雜的手工密碼,在五十年代早期被至少一名蘇聯間諜使用過,在當時是十分安全的)
流密碼
LFSR流密碼
EIGamal密碼
RSA密碼
對傳統密碼學的攻擊
頻率分析
重合指數
經典密碼學
在近代以前,密碼學只考慮到信息的機密性(confidentiality):如何將可理解的信息轉換成難以理解的信息,並且使得有秘密信息的人能夠逆向回復,但缺乏秘密信息的攔截者或竊聽者則無法解讀。近數十年來,這個領域已經擴展到涵蓋身分認證(或稱鑒權)、信息完整性檢查、數字簽名、互動證明、安全多方計算等各類技術。
古中國周朝兵書《六韜.龍韜》也記載了密碼學的運用,其中的《陰符》和《陰書》便記載了周武王問姜子牙關於征戰時與主將通訊的方式: 太公曰:「主與將,有陰符,凡八等。有大勝克敵之符,長一尺。破軍擒將之符,長九寸。降城得邑之符,長八寸。卻敵報遠之符,長七寸。警眾堅守之符,長六寸。請糧益兵之符,長五寸。敗軍亡將之符,長四寸。失利亡士之符,長三寸。諸奉使行符,稽留,若符事聞,泄告者,皆誅之。八符者,主將秘聞,所以陰通言語,不泄中外相知之術。敵雖聖智,莫之能識。」
武王問太公曰:「… 符不能明;相去遼遠,言語不通。為之奈何?」
太公曰:「諸有陰事大慮,當用書,不用符。主以書遺將,將以書問主。書皆一合而再離,三發而一知。再離者,分書為三部。三發而一知者,言三人,人操一分,相參而不相知情也。此謂陰書。敵雖聖智,莫之能識。」 陰符是以八等長度的符來表達不同的消息和指令,可算是密碼學中的替代法(en:substitution),把信息轉變成敵人看不懂的符號。至於陰書則運用了移位法,把書一分為三,分三人傳遞,要把三份書重新拼合才能獲得還原的信息。
除了應用於軍事外,公元四世紀婆羅門學者伐蹉衍那(en:Vatsyayana) 所書的《欲經》4 中曾提及到用代替法加密信息。書中第45項是秘密書信(en:mlecchita-vikalpa) ,用以幫助婦女隱瞞她們與愛郞之間的關系。其中一種方法是把字母隨意配對互換,如套用在羅馬字母中,可有得出下表: A B C D E F G H I J K L M Z Y X W V U T S R Q P O N 由經典加密法產生的密碼文很容易泄漏關於明文的統計信息,以現代觀點其實很容易被破解。阿拉伯人津帝(en:al-Kindi)便提及到如果要破解加密信息,可在一篇至少一頁長的文章中數算出每個字母出現的頻率,在加密信件中也數算出每個符號的頻率,然後互相對換,這是頻率分析的前身,此後幾乎所有此類的密碼都馬上被破解。但經典密碼學仍未消失,經常出現在謎語之中(見en:cryptogram)。這種分析法除了被用在破解密碼法外,也常用於考古學上。在破解古埃及象形文字(en:Hieroglyphs)時便運用了這種解密法。 標准機構
the Federal Information Processing Standards Publication program (run by NIST to proce standards in many areas to guide operations of the US Federal government; many FIPS Pubs are cryptography related,ongoing)
the ANSI standardization process (proces many standards in many areas; some are cryptography related,ongoing)
ISO standardization process (proces many standards in many areas; some are cryptography related,ongoing)
IEEE standardization process (proces many standards in many areas; some are cryptography related,ongoing)
IETF standardization process (proces many standards (called RFCs) in many areas; some are cryptography related,ongoing)
See Cryptography standards
加密組織
NSA internal evaluation/selections (surely extensive,nothing is publicly known of the process or its results for internal use; NSA is charged with assisting NIST in its cryptographic responsibilities)
GCHQ internal evaluation/selections (surely extensive,nothing is publicly known of the process or its results for GCHQ use; a division of GCHQ is charged with developing and recommending cryptographic standards for the UK government)
DSD Australian SIGINT agency - part of ECHELON
Communications Security Establishment (CSE) - Canadian intelligence agency.
努力成果
the DES selection (NBS selection process,ended 1976)
the RIPE division of the RACE project (sponsored by the European Union,ended mid-'80s)
the AES competition (a 'break-off' sponsored by NIST; ended 2001)
the NESSIE Project (evaluation/selection program sponsored by the European Union; ended 2002)
the CRYPTREC program (Japanese government sponsored evaluation/recommendation project; draft recommendations published 2003)
the Internet Engineering Task Force (technical body responsible for Internet standards -- the Request for Comment series: ongoing)
the CrypTool project (eLearning programme in English and German; freeware; exhaustive ecational tool about cryptography and cryptanalysis)
加密散列函數 (消息摘要演算法,MD演算法)
加密散列函數
消息認證碼
Keyed-hash message authentication code
EMAC (NESSIE selection MAC)
HMAC (NESSIE selection MAC; ISO/IEC 9797-1,FIPS and IETF RFC)
TTMAC 也稱 Two-Track-MAC (NESSIE selection MAC; K.U.Leuven (Belgium) & debis AG (Germany))
UMAC (NESSIE selection MAC; Intel,UNevada Reno,IBM,Technion,& UCal Davis)
MD5 (系列消息摘要演算法之一,由MIT的Ron Rivest教授提出; 128位摘要)
SHA-1 (NSA開發的160位摘要,FIPS標准之一;第一個發行發行版本被發現有缺陷而被該版本代替; NIST/NSA 已經發布了幾個具有更長'摘要'長度的變種; CRYPTREC推薦 (limited))
SHA-256 (NESSIE 系列消息摘要演算法,FIPS標准之一180-2,摘要長度256位 CRYPTREC recommendation)
SHA-384 (NESSIE 列消息摘要演算法,FIPS標准之一180-2,摘要長度384位; CRYPTREC recommendation)
SHA-512 (NESSIE 列消息摘要演算法,FIPS標准之一180-2,摘要長度512位; CRYPTREC recommendation)
RIPEMD-160 (在歐洲為 RIPE 項目開發,160位摘要;CRYPTREC 推薦 (limited))
Tiger (by Ross Anderson et al)
Snefru
Whirlpool (NESSIE selection hash function,Scopus Tecnologia S.A. (Brazil) & K.U.Leuven (Belgium))
公/私鑰加密演算法(也稱 非對稱性密鑰演算法)
ACE-KEM (NESSIE selection asymmetric encryption scheme; IBM Zurich Research)
ACE Encrypt
Chor-Rivest
Diffie-Hellman(key agreement; CRYPTREC 推薦)
El Gamal (離散對數)
ECC(橢圓曲線密碼演算法) (離散對數變種)
PSEC-KEM (NESSIE selection asymmetric encryption scheme; NTT (Japan); CRYPTREC recommendation only in DEM construction w/SEC1 parameters) )
ECIES (Elliptic Curve Integrated Encryption System; Certicom Corp)
ECIES-KEM
ECDH (橢圓曲線Diffie-Hellman 密鑰協議; CRYPTREC推薦)
EPOC
Merkle-Hellman (knapsack scheme)
McEliece
NTRUEncrypt
RSA (因數分解)
RSA-KEM (NESSIE selection asymmetric encryption scheme; ISO/IEC 18033-2 draft)
RSA-OAEP (CRYPTREC 推薦)
Rabin cryptosystem (因數分解)
Rabin-SAEP
HIME(R)
XTR
公/私鑰簽名演算法
DSA(zh:數字簽名;zh-tw:數位簽章演算法) (來自NSA,zh:數字簽名;zh-tw:數位簽章標准(DSS)的一部分; CRYPTREC 推薦)
Elliptic Curve DSA (NESSIE selection digital signature scheme; Certicom Corp); CRYPTREC recommendation as ANSI X9.62,SEC1)
Schnorr signatures
RSA簽名
RSA-PSS (NESSIE selection digital signature scheme; RSA Laboratories); CRYPTREC recommendation)
RSASSA-PKCS1 v1.5 (CRYPTREC recommendation)
Nyberg-Rueppel signatures
MQV protocol
Gennaro-Halevi-Rabin signature scheme
Cramer-Shoup signature scheme
One-time signatures
Lamport signature scheme
Bos-Chaum signature scheme
Undeniable signatures
Chaum-van Antwerpen signature scheme
Fail-stop signatures
Ong-Schnorr-Shamir signature scheme
Birational permutation scheme
ESIGN
ESIGN-D
ESIGN-R
Direct anonymous attestation
NTRUSign用於移動設備的公鑰加密演算法,密鑰比較短小但也能達到高密鑰ECC的加密效果
SFLASH (NESSIE selection digital signature scheme (esp for smartcard applications and similar); Schlumberger (France))
Quartz
秘密鑰演算法 (也稱 對稱性密鑰演算法)
流密碼
A5/1,A5/2 (GSM行動電話標准中指定的密碼標准)
BMGL
Chameleon
FISH (by Siemens AG)
二戰'Fish'密碼
Geheimfernschreiber (二戰時期Siemens AG的機械式一次一密密碼,被布萊奇利(Bletchley)庄園稱為STURGEON)
Schlusselzusatz (二戰時期 Lorenz的機械式一次一密密碼,被布萊奇利(Bletchley)庄園稱為[[tunny)
HELIX
ISAAC (作為偽隨機數發生器使用)
Leviathan (cipher)
LILI-128
MUG1 (CRYPTREC 推薦使用)
MULTI-S01 (CRYPTREC 推薦使用)
一次一密 (Vernam and Mauborgne,patented mid-'20s; an extreme stream cypher)
Panama
Pike (improvement on FISH by Ross Anderson)
RC4 (ARCFOUR) (one of a series by Prof Ron Rivest of MIT; CRYPTREC 推薦使用 (limited to 128-bit key))
CipherSaber (RC4 variant with 10 byte random IV,易於實現)
SEAL
SNOW
SOBER
SOBER-t16
SOBER-t32
WAKE
分組密碼
分組密碼操作模式
乘積密碼
Feistel cipher (由Horst Feistel提出的分組密碼設計模式)
Advanced Encryption Standard (分組長度為128位; NIST selection for the AES,FIPS 197,2001 -- by Joan Daemen and Vincent Rijmen; NESSIE selection; CRYPTREC 推薦使用)
Anubis (128-bit block)
BEAR (由流密碼和Hash函數構造的分組密碼,by Ross Anderson)
Blowfish (分組長度為128位; by Bruce Schneier,et al)
Camellia (分組長度為128位; NESSIE selection (NTT & Mitsubishi Electric); CRYPTREC 推薦使用)
CAST-128 (CAST5) (64 bit block; one of a series of algorithms by Carlisle Adams and Stafford Tavares,who are insistent (indeed,adamant) that the name is not e to their initials)
CAST-256 (CAST6) (128位分組長度; CAST-128的後繼者,AES的競爭者之一)
CIPHERUNICORN-A (分組長度為128位; CRYPTREC 推薦使用)
CIPHERUNICORN-E (64 bit block; CRYPTREC 推薦使用 (limited))
CMEA - 在美國行動電話中使用的密碼,被發現有弱點.
CS-Cipher (64位分組長度)
DESzh:數字;zh-tw:數位加密標准(64位分組長度; FIPS 46-3,1976)
DEAL - 由DES演變來的一種AES候選演算法
DES-X 一種DES變種,增加了密鑰長度.
FEAL
GDES -一個DES派生,被設計用來提高加密速度.
Grand Cru (128位分組長度)
Hierocrypt-3 (128位分組長度; CRYPTREC 推薦使用))
Hierocrypt-L1 (64位分組長度; CRYPTREC 推薦使用 (limited))
International Data Encryption Algorithm (IDEA) (64位分組長度--蘇黎世ETH的James Massey & X Lai)
Iraqi Block Cipher (IBC)
KASUMI (64位分組長度; 基於MISTY1,被用於下一代W-CDMAcellular phone 保密)
KHAZAD (64-bit block designed by Barretto and Rijmen)
Khufu and Khafre (64位分組密碼)
LOKI89/91 (64位分組密碼)
LOKI97 (128位分組長度的密碼,AES候選者)
Lucifer (by Tuchman et al of IBM,early 1970s; modified by NSA/NBS and released as DES)
MAGENTA (AES 候選者)
Mars (AES finalist,by Don Coppersmith et al)
MISTY1 (NESSIE selection 64-bit block; Mitsubishi Electric (Japan); CRYPTREC 推薦使用 (limited))
MISTY2 (分組長度為128位:Mitsubishi Electric (Japan))
Nimbus (64位分組)
Noekeon (分組長度為128位)
NUSH (可變分組長度(64 - 256位))
Q (分組長度為128位)
RC2 64位分組,密鑰長度可變.
RC6 (可變分組長度; AES finalist,by Ron Rivest et al)
RC5 (by Ron Rivest)
SAFER (可變分組長度)
SC2000 (分組長度為128位; CRYPTREC 推薦使用)
Serpent (分組長度為128位; AES finalist by Ross Anderson,Eli Biham,Lars Knudsen)
SHACAL-1 (256-bit block)
SHACAL-2 (256-bit block cypher; NESSIE selection Gemplus (France))
Shark (grandfather of Rijndael/AES,by Daemen and Rijmen)
Square (father of Rijndael/AES,by Daemen and Rijmen)
3-Way (96 bit block by Joan Daemen)
TEA(小型加密演算法)(by David Wheeler & Roger Needham)
Triple DES (by Walter Tuchman,leader of the Lucifer design team -- not all triple uses of DES increase security,Tuchman's does; CRYPTREC 推薦使用 (limited),only when used as in FIPS Pub 46-3)
Twofish (分組長度為128位; AES finalist by Bruce Schneier,et al)
XTEA (by David Wheeler & Roger Needham)
多表代替密碼機密碼
Enigma (二戰德國轉輪密碼機--有很多變種,多數變種有很大的用戶網路)
紫密(Purple) (二戰日本外交最高等級密碼機;日本海軍設計)
SIGABA (二戰美國密碼機,由William Friedman,Frank Rowlett,等人設計)
TypeX (二戰英國密碼機)
Hybrid code/cypher combinations
JN-25 (二戰日本海軍的高級密碼; 有很多變種)
Naval Cypher 3 (30年代和二戰時期英國皇家海軍的高級密碼)
可視密碼
有密級的 密碼 (美國)
EKMS NSA的電子密鑰管理系統
FNBDT NSA的加密窄帶話音標准
Fortezza encryption based on portable crypto token in PC Card format
KW-26 ROMULUS 電傳加密機(1960s - 1980s)
KY-57 VINSON 戰術電台語音加密
SINCGARS 密碼控制跳頻的戰術電台
STE 加密電話
STU-III 較老的加密電話
TEMPEST prevents compromising emanations
Type 1 procts
雖然頻率分析是很有效的技巧,實際上加密法通常還是有用的。不使用頻率分析來破解一個信息需要知道是使用何種加密法,因此才會促成了諜報、賄賂、竊盜或背叛等行為。直到十九世紀學者們才體認到加密法的演算法並非理智或實在的防護。實際上,適當的密碼學機制(包含加解密法)應該保持安全,即使敵人知道了使用何種演算法。對好的加密法來說,鑰匙的秘密性理應足以保障資料的機密性。這個原則首先由奧古斯特·柯克霍夫(Auguste Kerckhoffs)提出並被稱為柯克霍夫原則(Kerckhoffs' principle)。資訊理論始祖克勞德·艾爾伍德·香農(Claude Shannon)重述:「敵人知道系統。」
大量的公開學術研究出現,是現代的事,這起源於一九七零年代中期,美國國家標准局(National Bureau of Standards,NBS;現稱國家標准技術研究所,National|Institute of Standards and Technology,NIST)制定數字加密標准(DES),Diffie和Hellman提出的開創性論文,以及公開釋出RSA。從那個時期開始,密碼學成為通訊、電腦網路、電腦安全等上的重要工具。許多現代的密碼技術的基礎依賴於特定基算問題的困難度,例如因子分解問題或是離散對數問題。許多密碼技術可被證明為只要特定的計算問題無法被有效的解出,那就安全。除了一個著名的例外:一次墊(one-time pad,OTP),這類證明是偶然的而非決定性的,但是是目前可用的最好的方式。
密碼學演算法與系統設計者不但要留意密碼學歷史,而且必須考慮到未來發展。例如,持續增加計算機處理速度會增進暴力攻擊法(brute-force attacks)的速度。量子計算的潛在效應已經是部份密碼學家的焦點。
二十世紀早期的密碼學本質上主要考慮語言學上的模式。從此之後重心轉移,數論。密碼學同時也是工程學的分支,但卻是與別不同,因為它必須面對有智能且惡意的對手,大部分其他的工程僅需處理無惡意的自然力量。檢視密碼學問題與量子物理間的關連也是熱門的研究。
現代密碼學大致可被區分為數個領域。對稱鑰匙密碼學指的是傳送方與接收方都擁有相同的鑰匙。直到1976年這都還是唯一的公開加密法。
現代的研究主要在分組密碼(block cipher)與流密碼(stream cipher)及其應用。分組密碼在某種意義上是阿伯提的多字元加密法的現代化。分組密碼取用明文的一個區塊和鑰匙,輸出相同大小的密文區塊。由於信息通常比單一區塊還長,因此有了各種方式將連續的區塊編織在一起。DES和AES是美國聯邦政府核定的分組密碼標准(AES將取代DES)。盡管將從標准上廢除,DES依然很流行(3DES變形仍然相當安全),被使用在非常多的應用上,從自動交易機、電子郵件到遠端存取。也有許多其他的區塊加密被發明、釋出,品質與應用上各有不同,其中不乏被破解者。
流密碼,相對於區塊加密,製造一段任意長的鑰匙原料,與明文依位元或字元結合,有點類似一次一密密碼本(one-time pad)。輸出的串流根據加密時的內部狀態而定。在一些流密碼上由鑰匙控制狀態的變化。RC4是相當有名的流密碼。
密碼雜湊函數(有時稱作消息摘要函數,雜湊函數又稱散列函數或哈希函數)不一定使用到鑰匙,但和許多重要的密碼演算法相關。它將輸入資料(通常是一整份文件)輸出成較短的固定長度雜湊值,這個過程是單向的,逆向操作難以完成,而且碰撞(兩個不同的輸入產生相同的雜湊值)發生的機率非常小。
信息認證碼或押碼(Message authentication codes,MACs)很類似密碼雜湊函數,除了接收方額外使用秘密鑰匙來認證雜湊值。
B. 密碼學系統
本文分為7個部分,第1部分介紹密碼學的基本概念,第2部分講解常見的對稱加密演算法,第3部分講解常見的非對稱加密演算法,第4部分講解 數字簽名, 第5部分講解PKI(Public Key Infrastructure),第6部分講解哈希函數加密,第7部分講解密碼學在區塊鏈里的應用, 最後一部分會講解隨機數。
比較常見的對稱加密演算法有: Digital Encryption Standard(DES), Triple-DES, IDEA, BLOWFISH。
對稱加密的挑戰:
非對稱加密的挑戰:
比較常見的非對稱加密演算法有: RSA, ElGamal, ECC。
菲斯特爾結構的塊加密演算法是著名的一個分組密碼加密的設計模型。
1990年後對DES進行徹底的密鑰搜索的速度開始引起DES用戶的不適。 然而,用戶並不想取代DES,因為它需要花費大量的時間和金錢來改變廣泛採用並嵌入到大型安全架構中的加密演算法。
務實的做法不是完全放棄DES,而是改變DES的使用方式。 這導致了三重DES(3DES)的修改方案。
三重DES
在使用3TDES之前,用戶首先生成並分配一個3TDES密鑰K,它由三個不同的DES密鑰K1,K2和K3組成。
詳細可以看 Triple-DES
高級加密標准(Advanced Encryption Standard,AES)是目前比較流行和廣頌橋扮泛採用的對稱加密演算法。 發現至少比三重DES快6倍。
AES的功能如下:
對稱密鑰對稱分組密碼
128位數據,128/192/256位密鑰
比Triple-DES更強更快
提供完整的規格和設計細節
詳細可以看 AES
這個密碼系統是最初的系統之一。 即使在今天,它仍然是最多被使用的密碼系統。 該系統由三位學者Ron Rivest,Adi Shamir和Len Adleman發明,因此被稱為RSA密碼系統。
下面給出生成RSA密鑰對的一個例子(為了便於理解,這里採用的素數p&q值很小,實際上這些值非常高)。
設兩個素數為p = 7且q = 13。因此,模數n = pq = 7×13 = 91。
選擇 e = 5,這是一個有效的選擇,因為沒有數字是公因子5和(p - 1)(q - 1)= 6×12 = 72,除了1。
這對數字(n,e) = (91, 5)形成公鑰,可以讓任何我們希望能夠向我們發送加密消息的人使用。
向擴展歐幾里德演算法輸入p = 7,q = 13和e = 5。 輸出將是d = 29。
因此,公鑰是(91, 5),私鑰是(91, 29)。
假設發送者希望發送一些文本消息給公鑰為(n,e)的人。然後發件人將明文表示為一系列小於n的數字。
為了加密第一個明消茄文P,它是一個模n的數字。 加密過程是簡單的數學步驟:
C = Pe mod n
換句話說,密文C等於明文P乘以自己e次,然後減去模n。 這意味著C也是一個小於n的數字。
回到我們的密鑰生成例子,明文P = 10,我們得到密文C:
C = 105 mod 91
屬於ECC的一種變化。加密的核心理念與RSA相似,也是利用離散對數很難求解。
但與RSA不同的野灶是 公鑰的組成部分,EIGamal的公鑰有三部分組成, 質模數 p, 生成元素 g, 以及 公共的 Y = gx(g的x次方) mod p。
詳細可以看 ElGamal Crytosystem
橢圓曲線密碼術(ECC)是用來描述一套密碼工具和協議的術語,其安全性基於特殊版本的離散對數問題。它不使用數字模p。ECC基於與稱為橢圓曲線的數學對象相關聯的數字集合。有這些數字的加法和計算倍數的規則,就像數字模p一樣。
ECC包含許多最初為模塊化數字設計的密碼方案的變體,如ElGamal加密和數字簽名演算法。
相信當應用於橢圓曲線上的點時,離散對數問題更加困難。這會提示從數字模p切換到橢圓曲線上的點。如果我們使用基於橢圓曲線的變體,也可以用較短的密鑰獲得等效的安全級別。
較短的密鑰有兩個好處:
易於管理
高效的計算
這些優點使基於橢圓曲線的加密方案變體對計算資源受到限制的應用程序非常有吸引力。
詳細可以看 Elliptic Curve Cryptography
^符號表示為多少次方
簽名 = 消息^D mod N (D和N 為簽名者的私鑰,計算消息的D次方並求mod N,所得余數即為簽名)
消息 = 簽名^E mod N (E和N 為簽名者的公鑰,計算簽名的E次方並求mod N)
舉個例子:
私鑰: D = 29; N = 323
公鑰: E = 5; N = 323
消息: 123
由於 N 的值為 323, 因此消息需要為 0 ~ 322 這個范圍內的整數. 假設需要對 123 這個消息進行簽名.
用私鑰(D,N) = (29,323) 對消息 123 進行簽名.
消息^D mod N = 123^29 mod 323 = 157
因此 (消息, 簽名) = (123, 157)
用公鑰(E,N) = (5,323)對消息進行驗證
簽名^E mod N = 157^5 mod 323 = 123
得到消息 123 與發送者發送過來的消息 123 是一致的,因此簽名驗證成功.
https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introction/
加法逆: a在集合中, -a在集合中的定義為使 a + (-a) = 0, 這就是加法逆元運算
乘法逆: a在集合中,且不為0, a^-1 在集合中定位為使 a* a^-1 = 1, 這就是乘法逆元運算
在聊橢圓曲線前,我們先打一些基礎然後再討論一下對數問題.
在一個集合上定義一個二元運算,這就是數學中的群。一個集合 G 要成為一個群,必須滿足下面 4 個條件:
從平常的加法概念來看, 整數集 Z 是一個群(而且是阿貝爾群). 自然數集 N 不是一個群.
我們可以在橢圓曲線上定義一個群:
https://andrea.corbellini.name/ecc/interactive/reals-add.html
如下圖: 點 A 的自我相加過程就是做 乘法的過程 這個過程叫 Point Doubling
計算 nP 需要做 n次加法 如果 n 為 k 位二進制 時間復雜度為 O(2^k)
倍加演算法 比如 n = 151 二進制為 10010111
用倍加演算法 時間復雜度有了很大的改進 O(logN) or O(k)
Q = nP
這只是 p = 211, 像 Secp256k1 這條橢圓曲線的 p = 34671663 一個78位的數字 要怎麼求出 n?
一個通俗的比喻: 假設這些點是有個人 A 在一個很大的房間里玩彈珠的游戲 玩了兩年 兩年後 A 的朋友 B來了 B看到了最後的點 以及 A 告訴B 起點 但是B怎麼能知道 A 是彈了多少次才從起點彈到終點?
上面這兩張圖是 橢圓曲線 - Secp256K1: y^2 = x^3 + 7
第一張圖: 定義在 實數域
第二張圖: 定義在 有限域Zp
是用下面的參數(p,a,b,G,n,h)形成的:
p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = 2^256 - 2^32 - 997
a = 0
b = 7
G = [0x79BE667E_F9DCBBAC_55A06295_CE870B07_029BFCDB_2DCE28D9_59F2815B_16F81798,
0x483ADA77_26A3C465_5DA4FBFC_0E1108A8_FD17B448_A6855419_9C47D08F_FB10D4B8]
n = 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFE_BAAEDCE6_AF48A03B_BFD25E8C_D0364141
h = 1
如果橢圓曲線上一點P, 存在最小的正整數 n 使得數乘 nP=O∞, 則將 n 稱為 P 的階
計算可得 27P = -P = (3, 13) 所以 28P = 0∞ P的階為28
如何簽名?
Sig = F sig ( F keccak256 ( m ) , k )
如何計算 r
如何計算 s
s ≡ q^-1 (Keccak256(m) + r * k) (mod p)
如何驗證簽名?
P.S. 上述驗證簽名的過程中 沒有用到發送者的 私鑰
RSA 密鑰大小(bits) ECC 密鑰大小 (bits)
1024 160
2048 224
3072 256
7680 384
15360 521
有一個研究例子 同一台計算能力的計算機
為什麼 比特幣和以太坊要選擇 Secp256k1 這條橢圓曲線?
假如有人提供一條橢圓曲線比如 Secp256r1 如何驗證這條曲線的安全性?
因為公鑰是公開的,很容易被破壞或者篡改,因此需要建立和維持一種可信的基礎機制來管理公鑰。
PKI由5部分組成:
作為比喻,證書可以被視為發給該人的身份證。人們使用駕照,護照等身份證來證明自己的身份。數字證書在電子世界中具有相同的基本功能。
但有一點不同,數字證書不僅發給人,還可以發給電腦,軟體包或任何其他需要證明電子世界身份的東西。
數字證書基於ITU標准X.509,該標準定義了公鑰證書和認證驗證的標准證書格式。因此數字證書有時也被稱為X.509證書。
與用戶客戶端相關的公鑰與證書頒發機構(CA)一起存儲在數字證書中,以及其他相關信息,例如客戶信息,到期日期,使用情況,發行者等。
CA對此整個信息進行數字簽名並在證書中包含數字簽名。
任何需要對客戶的公共密鑰和相關信息進行保證的人,他都會使用CA的公鑰進行簽名驗證過程。成功的驗證可確保證書中給出的公鑰屬於在證書中給出詳細信息的人員。
下圖了展示了個人/實體獲取數字證書的過程:
如圖所示,CA接受來自客戶端的申請以證明其公鑰。 CA在適當驗證客戶身份後,向該客戶發出數字證書。
如上所述,CA向客戶頒發證書並協助其他用戶驗證證書。 CA負責正確識別要求頒發證書的客戶的身份,並確保證書中包含的信息是正確的並對其進行數字簽名。
CA的關鍵功能:
證書類別
有四種典型的證書類別:
第1類 - 通過提供電子郵件地址可輕松獲取這些證書。
第2類 - 這些證書要求提供額外的個人信息。
第3類 - 這些證書只有在對請求者的身份進行檢查後才能購買。
第4類 - 它們被需要高度信任的政府和金融機構使用。
CA可以使用第三方注冊機構(RA)對要求證書確認其身份的人或公司進行必要的檢查。 RA可能在客戶端看起來像一個CA,但它們實際上並不簽署發布的證書。
這是發布證書的管理系統,暫時或永久暫停,續訂或撤銷證書。 證書管理系統通常不會刪除證書,因為可能有必要在某個時間點證明其身份,這是出於法律原因。 CA和相關RA運行證書管理系統,以便能夠跟蹤他們的責任。
雖然客戶端的公鑰存儲在證書中,但關聯的私鑰可以存儲在密鑰所有者的計算機上。 這種方法一般不採用。 如果攻擊者能夠訪問計算機,他可以輕松訪問私鑰。 出於這個原因,私鑰存儲在通過密碼保護的安全可移動存儲令牌上。
不同的供應商經常使用不同的專有的存儲格式來存儲密鑰。 例如,Entrust使用專有的.epf格式,而Verisign,GlobalSign和Baltimore使用標準的.p12格式。
1.6 Hierarchy of CA:
由於擁有龐大的網路和全球通信的要求,所有用戶從唯一一個可信的CA獲得證書是不切實際的。其次,只有一個CA的可用性可能會導致大的阻礙,如果CA受到影響。
在這種情況下,層次認證模型很受關注,因為它允許在兩個通信方與相同CA沒有信任關系的環境中使用公鑰證書。
根CA位於CA層次結構的頂部,根CA的證書是自簽名證書。
直接隸屬於根CA(例如,CA1和CA2)的CA具有由根CA簽名的CA證書。
層次結構中下級CA(例如,CA5和CA6)下的CA具有由上級下級CA簽名的CA證書。
證書頒發機構(CA)層次體現在證書鏈中。證書鏈跟蹤從層次結構中的分支到層次結構根的證書路徑。
下圖顯示了具有從實體證書到兩個從屬CA證書(CA6和CA3)到根證書頒發機構CA證書的證書鏈的CA層次結構:
驗證證書鏈是確保特定證書鏈有效,正確簽署和可信的過程。 以下過程驗證證書鏈,從提供驗證的證書開始 -
一個正在驗證其真實性的客戶端提供他的證書,通常連同證書鏈一直到根CA.
驗證者獲取證書並使用發行者的公鑰進行驗證。 發行人的公鑰在發行人的證書中找到,該證書位於客戶證書旁邊的鏈中。
現在,如果已簽署發行人證書的較高的CA由驗證方信任,則驗證成功並在此停止。
否則,發行人證書的驗證方式與客戶在上述步驟中完成的相似。 此過程將繼續進行,直到在其中找到可信的CA,否則它將持續到根CA。
哈希函數非常有用,並且出現在幾乎所有信息安全應用程序中。
哈希函數是將數字輸入值轉換為另一個壓縮數值的 數學函數。 哈希函數的輸入具有任意長度,但輸出始終為固定長度。
哈希函數返回的值稱為消息摘要或簡單的散列值。 下面的圖片說明了哈希函數:
為了成為一個有效的加密工具,哈希函數具有以下屬性:
散列的核心是一個數學函數,該函數在兩個固定大小的數據塊上運行以創建散列碼。 這個哈希函數構成哈希演算法的一部分。
每個數據塊的大小因演算法而異。 通常塊大小從128位到512位。 下圖演示了哈希函數:
哈希演算法涉及上述哈希函數,如分組密碼。 每一輪都會輸入一個固定的大小,通常是最近消息塊和最後一輪輸出的組合。
這個過程重復進行多次,以散列整個消息。 哈希演算法的示意圖如下圖所示:
因為第一消息塊的散列值變成第二散列操作的輸入,其輸出改變第三操作的結果,等等。 這種效應被稱為散列的雪崩效應。雪崩效應對兩個即使是單個數據位也不相同的消息產生明顯不同的散列值。理解哈希函數和演算法之間的區別。 哈希函數通過對兩個固定長度的二進制數據塊進行操作來生成哈希碼。哈希演算法是一個使用哈希函數的過程,指定如何分解消息以及如何將先前消息塊的結果鏈接在一起。
後來在1995年,SHA-1被設計用於糾正SHA-0的所謂弱點。SHA-1是現有SHA哈希函數中使用最廣泛的。它被用於幾個廣泛使用的應用程序和協議,包括安全套接字層(SSL)安全。
2005年,發現了一種在實際時間框架內發現SHA-1沖突的方法,使SHA-1的長期可用性受到懷疑。
SHA-2系列具有四個更進一步的SHA變體,SHA-224,SHA-256,SHA-384和SHA-512,取決於其散列值中的位數。還沒有成功的攻擊報道過SHA-2哈希函數。
雖然SHA-2是一個強大的哈希函數。雖然有很大的不同,但其基本設計仍然遵循SHA-1的設計。因此,NIST要求提供新的競爭性散列函數設計。
2012年10月,NIST選擇Keccak演算法作為新的SHA-3標准。 Keccak提供了許多好處,例如高效的表現和良好的攻擊抵抗力。
該集包括RIPEND,RIPEMD-128和RIPEMD-160。此演算法還有256位和320位版本。
原始的RIPEMD(128位)基於MD4中使用的設計原則,並且發現提供可疑的安全性。 RIPEMD 128位版本是解決原始RIPEMD漏洞的快速修復替代品。
RIPEMD-160是一個改進版本,是使用最廣泛的版本。與RIPEMD-128和RIPEMD-160相比,256和320位版本分別減少了意外沖突的可能性,但沒有更高的安全等級。
Merkle Tree 默克爾樹
哈希演算法的一個重要應用是默克爾樹(Merkle tree),默克爾樹是一種數據結構,通常是一個二叉樹,也有可能是多叉樹,它以特定的方式逐層向上計算,直到頂部,最頂層叫做默克爾根(Merkle Root),默克爾樹最為常見和最簡單的是二叉默克爾樹。
C. 首次將橢圓曲線用於密碼學,建立公開密鑰加密的演演算法是在那一年
橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為 ECC),一種建立公開密鑰加密的演算法,基於橢圓曲線數學。
橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。
橢圓曲線密碼學:
橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為ECC),一種建立公開密鑰加密的演算法,基於橢圓曲線數學。橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。
ECC的主要優勢是在某些情況下它比其他的方法使用更小的密鑰——比如RSA加密演算法——提供相當的或更高等級的安全。ECC的另一個優勢是可以定義群之間的雙線性映射。
基於Weil對或是Tate對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。其缺點是同長度密鑰下加密和解密操作的實現比其他機制花費的時間長。
但由於可以使用更短的密鑰達到同級的安全程度,所以同級安全程度下速度相對更快。一般認為160比特的橢圓曲線密鑰提供的安全強度與1024比特RSA密鑰相當。
D. 非對稱加密演算法 (RSA、DSA、ECC、DH)
非對稱加密需要兩個密鑰:公鑰(publickey) 和私鑰 (privatekey)。公鑰和私鑰是一對,如果用公鑰對數據加密,那麼只能用對應的私鑰解密。如果用私鑰對數據加密,只能用對應的公鑰進行解密。因為加密和解密用的是不同的密鑰,所以稱為非對稱加密。
非對稱加密演算法的保密性好,它消除了最終用戶交換密鑰的需要。但是加解密速度要遠遠慢於對稱加密,在某些極端情況下,甚至能比對稱加密慢上1000倍。
演算法強度復雜、安全性依賴於演算法與密鑰但是由於其演算法復雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中只有一種密鑰,並且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
RSA、Elgamal、背包演算法、Rabin、D-H、ECC (橢圓曲線加密演算法)。使用最廣泛的是 RSA 演算法,Elgamal 是另一種常用的非對稱加密演算法。
收信者是唯一能夠解開加密信息的人,因此收信者手裡的必須是私鑰。發信者手裡的是公鑰,其它人知道公鑰沒有關系,因為其它人發來的信息對收信者沒有意義。
客戶端需要將認證標識傳送給伺服器,此認證標識 (可能是一個隨機數) 其它客戶端可以知道,因此需要用私鑰加密,客戶端保存的是私鑰。伺服器端保存的是公鑰,其它伺服器知道公鑰沒有關系,因為客戶端不需要登錄其它伺服器。
數字簽名是為了表明信息沒有受到偽造,確實是信息擁有者發出來的,附在信息原文的後面。就像手寫的簽名一樣,具有不可抵賴性和簡潔性。
簡潔性:對信息原文做哈希運算,得到消息摘要,信息越短加密的耗時越少。
不可抵賴性:信息擁有者要保證簽名的唯一性,必須是唯一能夠加密消息摘要的人,因此必須用私鑰加密 (就像字跡他人無法學會一樣),得到簽名。如果用公鑰,那每個人都可以偽造簽名了。
問題起源:對1和3,發信者怎麼知道從網上獲取的公鑰就是真的?沒有遭受中間人攻擊?
這樣就需要第三方機構來保證公鑰的合法性,這個第三方機構就是 CA (Certificate Authority),證書中心。
CA 用自己的私鑰對信息原文所有者發布的公鑰和相關信息進行加密,得出的內容就是數字證書。
信息原文的所有者以後發布信息時,除了帶上自己的簽名,還帶上數字證書,就可以保證信息不被篡改了。信息的接收者先用 CA給的公鑰解出信息所有者的公鑰,這樣可以保證信息所有者的公鑰是真正的公鑰,然後就能通過該公鑰證明數字簽名是否真實了。
RSA 是目前最有影響力的公鑰加密演算法,該演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰,即公鑰,而兩個大素數組合成私鑰。公鑰是可發布的供任何人使用,私鑰則為自己所有,供解密之用。
A 要把信息發給 B 為例,確定角色:A 為加密者,B 為解密者。首先由 B 隨機確定一個 KEY,稱之為私鑰,將這個 KEY 始終保存在機器 B 中而不發出來;然後,由這個 KEY 計算出另一個 KEY,稱之為公鑰。這個公鑰的特性是幾乎不可能通過它自身計算出生成它的私鑰。接下來通過網路把這個公鑰傳給 A,A 收到公鑰後,利用公鑰對信息加密,並把密文通過網路發送到 B,最後 B 利用已知的私鑰,就能對密文進行解碼了。以上就是 RSA 演算法的工作流程。
由於進行的都是大數計算,使得 RSA 最快的情況也比 DES 慢上好幾倍,無論是軟體還是硬體實現。速度一直是 RSA 的缺陷。一般來說只用於少量數據加密。RSA 的速度是對應同樣安全級別的對稱密碼演算法的1/1000左右。
比起 DES 和其它對稱演算法來說,RSA 要慢得多。實際上一般使用一種對稱演算法來加密信息,然後用 RSA 來加密比較短的公鑰,然後將用 RSA 加密的公鑰和用對稱演算法加密的消息發送給接收方。
這樣一來對隨機數的要求就更高了,尤其對產生對稱密碼的要求非常高,否則的話可以越過 RSA 來直接攻擊對稱密碼。
和其它加密過程一樣,對 RSA 來說分配公鑰的過程是非常重要的。分配公鑰的過程必須能夠抵擋中間人攻擊。假設 A 交給 B 一個公鑰,並使 B 相信這是A 的公鑰,並且 C 可以截下 A 和 B 之間的信息傳遞,那麼 C 可以將自己的公鑰傳給 B,B 以為這是 A 的公鑰。C 可以將所有 B 傳遞給 A 的消息截下來,將這個消息用自己的密鑰解密,讀這個消息,然後將這個消息再用 A 的公鑰加密後傳給 A。理論上 A 和 B 都不會發現 C 在偷聽它們的消息,今天人們一般用數字認證來防止這樣的攻擊。
(1) 針對 RSA 最流行的攻擊一般是基於大數因數分解。1999年,RSA-155 (512 bits) 被成功分解,花了五個月時間(約8000 MIPS 年)和224 CPU hours 在一台有3.2G 中央內存的 Cray C916計算機上完成。
RSA-158 表示如下:
2009年12月12日,編號為 RSA-768 (768 bits, 232 digits) 數也被成功分解。這一事件威脅了現通行的1024-bit 密鑰的安全性,普遍認為用戶應盡快升級到2048-bit 或以上。
RSA-768表示如下:
(2) 秀爾演算法
量子計算里的秀爾演算法能使窮舉的效率大大的提高。由於 RSA 演算法是基於大數分解 (無法抵抗窮舉攻擊),因此在未來量子計算能對 RSA 演算法構成較大的威脅。一個擁有 N 量子位的量子計算機,每次可進行2^N 次運算,理論上講,密鑰為1024位長的 RSA 演算法,用一台512量子比特位的量子計算機在1秒內即可破解。
DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 簽名演算法的變種,被美國 NIST 作為 DSS (DigitalSignature Standard)。 DSA 是基於整數有限域離散對數難題的。
簡單的說,這是一種更高級的驗證方式,用作數字簽名。不單單只有公鑰、私鑰,還有數字簽名。私鑰加密生成數字簽名,公鑰驗證數據及簽名,如果數據和簽名不匹配則認為驗證失敗。數字簽名的作用就是校驗數據在傳輸過程中不被修改,數字簽名,是單向加密的升級。
橢圓加密演算法(ECC)是一種公鑰加密演算法,最初由 Koblitz 和 Miller 兩人於1985年提出,其數學基礎是利用橢圓曲線上的有理點構成 Abel 加法群上橢圓離散對數的計算困難性。公鑰密碼體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。有時也把橢圓曲線類歸為離散對數類。
ECC 的主要優勢是在某些情況下它比其他的方法使用更小的密鑰 (比如 RSA),提供相當的或更高等級的安全。ECC 的另一個優勢是可以定義群之間的雙線性映射,基於 Weil 對或是 Tate 對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操作的實現比其他機制花費的時間長。
ECC 被廣泛認為是在給定密鑰長度的情況下,最強大的非對稱演算法,因此在對帶寬要求十分緊的連接中會十分有用。
比特幣錢包公鑰的生成使用了橢圓曲線演算法,通過橢圓曲線乘法可以從私鑰計算得到公鑰, 這是不可逆轉的過程。
https://github.com/esxgx/easy-ecc
Java 中 Chipher、Signature、KeyPairGenerator、KeyAgreement、SecretKey 均不支持 ECC 演算法。
https://www.jianshu.com/p/58c1750c6f22
DH,全稱為"Diffie-Hellman",它是一種確保共享 KEY 安全穿越不安全網路的方法,也就是常說的密鑰一致協議。由公開密鑰密碼體制的奠基人 Diffie 和 Hellman 所提出的一種思想。簡單的說就是允許兩名用戶在公開媒體上交換信息以生成"一致"的、可以共享的密鑰。也就是由甲方產出一對密鑰 (公鑰、私鑰),乙方依照甲方公鑰產生乙方密鑰對 (公鑰、私鑰)。
以此為基線,作為數據傳輸保密基礎,同時雙方使用同一種對稱加密演算法構建本地密鑰 (SecretKey) 對數據加密。這樣,在互通了本地密鑰 (SecretKey) 演算法後,甲乙雙方公開自己的公鑰,使用對方的公鑰和剛才產生的私鑰加密數據,同時可以使用對方的公鑰和自己的私鑰對數據解密。不單單是甲乙雙方兩方,可以擴展為多方共享數據通訊,這樣就完成了網路交互數據的安全通訊。
具體例子可以移步到這篇文章: 非對稱密碼之DH密鑰交換演算法
參考:
https://blog.csdn.net/u014294681/article/details/86705999
https://www.cnblogs.com/wangzxblog/p/13667634.html
https://www.cnblogs.com/taoxw/p/15837729.html
https://www.cnblogs.com/fangfan/p/4086662.html
https://www.cnblogs.com/utank/p/7877761.html
https://blog.csdn.net/m0_59133441/article/details/122686815
https://www.cnblogs.com/muliu/p/10875633.html
https://www.cnblogs.com/wf-zhang/p/14923279.html
https://www.jianshu.com/p/7a927db713e4
https://blog.csdn.net/ljx1400052550/article/details/79587133
https://blog.csdn.net/yuanjian0814/article/details/109815473
E. 密鑰管理的管理技術
1、對稱密鑰管理。對稱加密是基於共同保守秘密來實現的。採用對稱加密技術的貿易雙方必須要保證採用的是相同的密鑰,要保證彼此密鑰的交換是安全可靠的,同時還要設定防止密鑰泄密和更改密鑰的程序。這樣,對稱密鑰的管理和分發工作將變成一件潛在危險的和繁瑣的過程。通過公開密鑰加密技術實現對稱密鑰的管理使相應的管理變得簡單和更加安全,同時還解決了純對稱密鑰模式中存在的可靠性問題和鑒別問題。 貿易方可以為每次交換的信息(如每次的EDI交換)生成唯一一把對稱密鑰並用公開密鑰對該密鑰進行加密,然後再將加密後的密鑰和用該密鑰加密的信息(如EDI交換)一起發送給相應的貿易方。由於對每次信息交換都對應生成了唯一一把密鑰,因此各貿易方就不再需要對密鑰進行維護和擔心密鑰的泄露或過期。這種方式的另一優點是,即使泄露了一把密鑰也只將影響一筆交易,而不會影響到貿易雙方之間所有的交易關系。這種方式還提供了貿易夥伴間發布對稱密鑰的一種安全途徑。
2、公開密鑰管理/數字證書。貿易夥伴間可以使用數字證書(公開密鑰證書)來交換公開密鑰。國際電信聯盟(ITU)制定的標准X.509,對數字證書進行了定義該標准等同於國際標准化組織(ISO)與國際電工委員會(IEC)聯合發布的ISO/IEC 9594-8:195標准。數字證書通常包含有唯一標識證書所有者(即貿易方)的名稱、唯一標識證書發布者的名稱、證書所有者的公開密鑰、證書發布者的數字簽名、證書的有效期及證書的序列號等。證書發布者一般稱為證書管理機構(CA),它是貿易各方都信賴的機構。數字證書能夠起到標識貿易方的作用,是目前電子商務廣泛採用的技術之一。
3、密鑰管理相關的標准規范。目前國際有關的標准化機構都著手制定關於密鑰管理的技術標准規范。ISO與IEC下屬的信息技術委員會(JTC1)已起草了關於密鑰管理的國際標准規范。該規范主要由三部分組成:一是密鑰管理框架;二是採用對稱技術的機制;三是採用非對稱技術的機制。該規范現已進入到國際標准草案表決階段,並將很快成為正式的國際標准。
數字簽名
數字簽名是公開密鑰加密技術的另一類應用。它的主要方式是:報文的發送方從報文文本中生成一個128位的散列值(或報文摘要)。發送方用自己的專用密鑰對這個散列值進行加密來形成發送方的數字簽名。然後,這個數字簽名將作為報文的附件和報文一起發送給報文的接收方。報文的接收方首先從接收到的原始報文中計算出128位的散列值(或報文摘要),接著再用發送方的公開密鑰來對報文附加的數字簽名進行解密。如果兩個散列值相同,那麼接收方就能確認該數字簽名是發送方的。通過數字簽名能夠實現對原始報文的鑒別和不可抵賴性。
ISO/IEC JTC1已在起草有關的國際標准規范。該標準的初步題目是「信息技術安全技術帶附件的數字簽名方案」,它由概述和基於身份的機制兩部分構成。 密碼學簡介 據記載,公元前400年,古希臘人發明了置換密碼。1881年世界上的第一個電話保密專利出現。在第二次世界大戰期間,德國軍方啟用「恩尼格瑪」密碼機,密碼學在戰爭中起著非常重要的作用。
隨著信息化和數字化社會的發展,人們對信息安全和保密的重要性認識不斷提高,於是在1997年,美國國家標准局公布實施了「美國數據加密標准(DES)」,民間力量開始全面介入密碼學的研究和應用中,採用的加密演算法有DES、RSA、SHA等。隨著對加密強度需求的不斷提高,近期又出現了AES、ECC等。
使用密碼學可以達到以下目的:
保密性:防止用戶的標識或數據被讀取。
數據完整性:防止數據被更改。
身份驗證:確保數據發自特定的一方。
二. 加密演算法介紹根據密鑰類型不同將現代密碼技術分為兩類:對稱加密演算法(秘密鑰匙加密)和非對稱加密演算法(公開密鑰加密)。
對稱鑰匙加密系統是加密和解密均採用同一把秘密鑰匙,而且通信雙方都必須獲得這把鑰匙,並保持鑰匙的秘密。
非對稱密鑰加密系統採用的加密鑰匙(公鑰)和解密鑰匙(私鑰)是不同的。 在對稱加密演算法中,只有一個密鑰用來加密和解密信息,即加密和解密採用相同的密鑰。常用的演算法包括:DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合。
3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
AES(Advanced Encryption Standard):高級加密標准,是下一代的加密演算法標准,速度快,安全級別高;
2000年10月,NIST(美國國家標准和技術協會)宣布通過從15種侯選演算法中選出的一項新的密匙加密標准。Rijndael被選中成為將來的AES。Rijndael是在 1999 年下半年,由研究員Joan Daemen 和 Vincent Rijmen 創建的。AES 正日益成為加密各種形式的電子數據的實際標准。
美國標准與技術研究院 (NIST) 於 2002 年 5 月 26 日制定了新的高級加密標准(AES) 規范。
演算法原理 AES 演算法基於排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換為另一個。AES 使用幾種不同的方法來執行排列和置換運算。
AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,並且用 128 位(16位元組)分組加密和解密數據。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據的位數與輸入數據相同。迭代加密使用一個循環結構,在該循環中重復置換和替換輸入數據。
AES與3DES的比較 演算法名稱 演算法類型 密鑰長度 速度 解密時間(建設機器每秒嘗試255個密鑰) 資源消耗 AES 對稱block密碼 128、192、256位 高 1490000億年 低 3DES 對稱feistel密碼 112位或168位 低 46億年 中 常見的非對稱加密演算法如下:
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰演算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數字簽名演算法,是一種標準的 DSS(數字簽名標准);
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。
在1976年,由於對稱加密演算法已經不能滿足需要,Diffie 和Hellman發表了一篇叫《密碼學新動向》的文章,介紹了公匙加密的概念,由Rivet、Shamir、Adelman提出了RSA演算法。
隨著分解大整數方法的進步及完善、計算機速度的提高以及計算機網路的發展,為了保障數據的安全,RSA的密鑰需要不斷增加,但是,密鑰長度的增加導致了其加解密的速度大為降低,硬體實現也變得越來越難以忍受,這對使用RSA的應用帶來了很重的負擔,因此需要一種新的演算法來代替RSA。
1985年N.Koblitz和Miller提出將橢圓曲線用於密碼演算法,根據是有限域上的橢圓曲線上的點群中的離散對數問題ECDLP。ECDLP是比因子分解問題更難的問題,它是指數級的難度。
原理——橢圓曲線上的難題 橢圓曲線上離散對數問題ECDLP定義如下:給定素數p和橢圓曲線E,對Q=kP,在已知P,Q 的情況下求出小於p的正整數k。可以證明由k和P計算Q比較容易,而由Q和P計算k則比較困難。
將橢圓曲線中的加法運算與離散對數中的模乘運算相對應,將橢圓曲線中的乘法運算與離散對數中的模冪運算相對應,我們就可以建立基於橢圓曲線的對應的密碼體制。
例如,對應Diffie-Hellman公鑰系統,我們可以通過如下方式在橢圓曲線上予以實現:在E上選取生成元P,要求由P產生的群元素足夠多,通信雙方A和B分別選取a和b,a和b 予以保密,但將aP和bP公開,A和B間通信用的密鑰為abP,這是第三者無法得知的。
對應ELGamal密碼系統可以採用如下的方式在橢圓曲線上予以實現:
將明文m嵌入到E上Pm點,選一點B∈E,每一用戶都選一整數a,0<a<N,N為階數已知,a保密,aB公開。欲向A送m,可送去下面一對數偶:[kB,Pm+k(aAB)],k是隨機產生的整數。A可以從kB求得k(aAB)。通過:Pm+k(aAB)- k(aAB)=Pm恢復Pm。同樣對應DSA,考慮如下等式:
K=kG [其中 K,G為Ep(a,b)上的點,k為小於n(n是點G的階)的整數]
不難發現,給定k和G,根據加法法則,計算K很容易;但給定K和G,求k就相對困難了。
這就是橢圓曲線加密演算法採用的難題。我們把點G稱為基點(base point),k(k<n,n為基點G的階)稱為私有密鑰(privte key),K稱為公開密鑰(public key)。
ECC與RSA的比較 ECC和RSA相比,在許多方面都有對絕對的優勢,主要體現在以下方面:
抗攻擊性強。相同的密鑰長度,其抗攻擊性要強很多倍。
計算量小,處理速度快。ECC總的速度比RSA、DSA要快得多。
存儲空間佔用小。ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,意味著它所佔的存貯空間要小得多。這對於加密演算法在IC卡上的應用具有特別重要的意義。
帶寬要求低。當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。帶寬要求低使ECC在無線網路領域具有廣泛的應用前景。
ECC的這些特點使它必將取代RSA,成為通用的公鑰加密演算法。比如SET協議的制定者已把它作為下一代SET協議中預設的公鑰密碼演算法。
下面兩張表示是RSA和ECC的安全性和速度的比較。 攻破時間(MIPS年) RSA/DSA(密鑰長度) ECC密鑰長度 RSA/ECC密鑰長度比 10 512 106 5:1 10 768 132 6:1 10 1024 160 7:1 10 2048 210 10:1 10 21000 600 35:1 RSA和ECC安全模長得比較 功能 Security Builder 1.2 BSAFE 3.0 163位ECC(ms) 1,023位RSA(ms) 密鑰對生成 3.8 4,708.3 簽名 2.1(ECNRA) 228.4 3.0(ECDSA) 認證 9.9(ECNRA) 12.7 10.7(ECDSA) Diffie—Hellman密鑰交換 7.3 1,654.0 RSA和ECC速度比較 散列演算法也叫哈希演算法,英文是Hash ,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
HASH主要用於信息安全領域中加密演算法,它把一些不同長度的信息轉化成雜亂的128位的編碼,這些編碼值叫做HASH值. 也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關系散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強的散列一定是不可逆的,這就意味著通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之為雪崩效應。散列還應該是防沖突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用於驗證信息是否被修改。
單向散列函數一般用於產生消息摘要,密鑰加密等,常見的有:
MD5(Message Digest Algorithm 5):是RSA數據安全公司開發的一種單向散列演算法。
SHA(Secure Hash Algorithm):可以對任意長度的數據運算生成一個160位的數值;
在1993年,安全散列演算法(SHA)由美國國家標准和技術協會(NIST)提出,並作為聯邦信息處理標准(FIPS PUB 180)公布;1995年又發布了一個修訂版FIPS PUB 180-1,通常稱之為SHA-1。SHA-1是基於MD4演算法的,並且它的設計在很大程度上是模仿MD4的。現在已成為公認的最安全的散列演算法之一,並被廣泛使用。
原理 SHA-1是一種數據加密演算法,該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。
單向散列函數的安全性在於其產生散列值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那麼任何人在不知道密碼的情況下都不能產生正確的散列值,從而保證了其安全性。SHA將輸入流按照每塊512位(64個位元組)進行分塊,並產生20個位元組的被稱為信息認證代碼或信息摘要的輸出。
該演算法輸入報文的最大長度不超過264位,產生的輸出是一個160位的報文摘要。輸入是按512 位的分組進行處理的。SHA-1是不可逆的、防沖突,並具有良好的雪崩效應。
通過散列演算法可實現數字簽名實現,數字簽名的原理是將要傳送的明文通過一種函數運算(Hash)轉換成報文摘要(不同的明文對應不同的報文摘要),報文摘要加密後與明文一起傳送給接受方,接受方將接受的明文產生新的報文摘要與發送方的發來報文摘要解密比較,比較結果一致表示明文未被改動,如果不一致表示明文已被篡改。
MAC (信息認證代碼)就是一個散列結果,其中部分輸入信息是密碼,只有知道這個密碼的參與者才能再次計算和驗證MAC碼的合法性。MAC的產生參見下圖。 輸入信息 密碼 散列函數 信息認證代碼 SHA-1與MD5的比較 因為二者均由MD4導出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行供給的安全性:最顯著和最重要的區別是SHA-1摘要比MD5摘要長32 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD5是2數量級的操作,而對SHA-1則是2數量級的操作。這樣,SHA-1對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-1的運行速度比MD5慢。 對稱與非對稱演算法比較
以上綜述了兩種加密方法的原理,總體來說主要有下面幾個方面的不同:
一、 在管理方面:公鑰密碼演算法只需要較少的資源就可以實現目的,在密鑰的分配上,兩者之間相差一個指數級別(一個是n一個是n)。所以私鑰密碼演算法不適應廣域網的使用,而且更重要的一點是它不支持數字簽名。
二、 在安全方面:由於公鑰密碼演算法基於未解決的數學難題,在破解上幾乎不可能。對於私鑰密碼演算法,到了AES雖說從理論來說是不可能破解的,但從計算機的發展角度來看。公鑰更具有優越性。
三、 從速度上來看:AES的軟體實現速度已經達到了每秒數兆或數十兆比特。是公鑰的100倍,如果用硬體來實現的話這個比值將擴大到1000倍。
加密演算法的選擇 前面的章節已經介紹了對稱解密演算法和非對稱加密演算法,有很多人疑惑:那我們在實際使用的過程中究竟該使用哪一種比較好呢?
我們應該根據自己的使用特點來確定,由於非對稱加密演算法的運行速度比對稱加密演算法的速度慢很多,當我們需要加密大量的數據時,建議採用對稱加密演算法,提高加解密速度。
對稱加密演算法不能實現簽名,因此簽名只能非對稱演算法。
由於對稱加密演算法的密鑰管理是一個復雜的過程,密鑰的管理直接決定著他的安全性,因此當數據量很小時,我們可以考慮採用非對稱加密演算法。
在實際的操作過程中,我們通常採用的方式是:採用非對稱加密演算法管理對稱演算法的密鑰,然後用對稱加密演算法加密數據,這樣我們就集成了兩類加密演算法的優點,既實現了加密速度快的優點,又實現了安全方便管理密鑰的優點。
如果在選定了加密演算法後,那採用多少位的密鑰呢?一般來說,密鑰越長,運行的速度就越慢,應該根據的我們實際需要的安全級別來選擇,一般來說,RSA建議採用1024位的數字,ECC建議採用160位,AES採用128為即可。
密碼學在現代的應用, 隨著密碼學商業應用的普及,公鑰密碼學受到前所未有的重視。除傳統的密碼應用系統外,PKI系統以公鑰密碼技術為主,提供加密、簽名、認證、密鑰管理、分配等功能。
保密通信:保密通信是密碼學產生的動因。使用公私鑰密碼體制進行保密通信時,信息接收者只有知道對應的密鑰才可以解密該信息。
數字簽名:數字簽名技術可以代替傳統的手寫簽名,而且從安全的角度考慮,數字簽名具有很好的防偽造功能。在政府機關、軍事領域、商業領域有廣泛的應用環境。
秘密共享:秘密共享技術是指將一個秘密信息利用密碼技術分拆成n個稱為共享因子的信息,分發給n個成員,只有k(k≤n)個合法成員的共享因子才可以恢復該秘密信息,其中任何一個或m(m≤k)個成員合作都不知道該秘密信息。利用秘密共享技術可以控制任何需要多個人共同控制的秘密信息、命令等。
認證功能:在公開的信道上進行敏感信息的傳輸,採用簽名技術實現對消息的真實性、完整性進行驗證,通過驗證公鑰證書實現對通信主體的身份驗證。
密鑰管理:密鑰是保密系統中更為脆弱而重要的環節,公鑰密碼體制是解決密鑰管理工作的有力工具;利用公鑰密碼體制進行密鑰協商和產生,保密通信雙方不需要事先共享秘密信息;利用公鑰密碼體制進行密鑰分發、保護、密鑰託管、密鑰恢復等。
基於公鑰密碼體制可以實現以上通用功能以外,還可以設計實現以下的系統:安全電子商務系統、電子現金系統、電子選舉系統、電子招投標系統、電子彩票系統等。
公鑰密碼體制的產生是密碼學由傳統的政府、軍事等應用領域走向商用、民用的基礎,同時互聯網、電子商務的發展為密碼學的發展開辟了更為廣闊的前景。
加密演算法的未來 隨著計算方法的改進,計算機運行速度的加快,網路的發展,越來越多的演算法被破解。
在2004年國際密碼學會議(Crypto』2004)上,來自中國山東大學的王小雲教授做的破譯MD5、HAVAL-128、MD4和RIPEMD演算法的報告,令在場的國際頂尖密碼學專家都為之震驚,意味著這些演算法將從應用中淘汰。隨後,SHA-1也被宣告被破解。
歷史上有三次對DES有影響的攻擊實驗。1997年,利用當時各國 7萬台計算機,歷時96天破解了DES的密鑰。1998年,電子邊境基金會(EFF)用25萬美元製造的專用計算機,用56小時破解了DES的密鑰。1999年,EFF用22小時15分完成了破解工作。因此。曾經有過卓越貢獻的DES也不能滿足我們日益增長的需求了。
最近,一組研究人員成功的把一個512位的整數分解因子,宣告了RSA的破解。
我們說數據的安全是相對的,可以說在一定時期一定條件下是安全的,隨著硬體和網路的發展,或者是另一個王小雲的出現,目前的常用加密演算法都有可能在短時間內被破解,那時我們不得不使用更長的密鑰或更加先進的演算法,才能保證數據的安全,因此加密演算法依然需要不斷發展和完善,提供更高的加密安全強度和運算速度。
縱觀這兩種演算法一個從DES到3DES再到AES,一個從RSA到ECC。其發展角度無不是從密鑰的簡單性,成本的低廉性,管理的簡易性,演算法的復雜性,保密的安全性以及計算的快速性這幾個方面去考慮。因此,未來演算法的發展也必定是從這幾個角度出發的,而且在實際操作中往往把這兩種演算法結合起來,也需將來一種集兩種演算法優點於一身的新型演算法將會出現,到那個時候,電子商務的實現必將更加的快捷和安全。
F. 什麼是ECC
ECC
ECC是「Error Checking and Correcting」的簡寫,中文名稱是「錯誤檢查和糾正」。ECC是一種能夠實現「錯誤檢查和糾正」的技術,ECC內存就是應用了這種技術的內存,一般多應用在伺服器及圖形工作站上,這將使整個電腦系統在工作時更趨於安全穩定。
要了解ECC技術,就不能不提到Parity(奇偶校驗)。在ECC技術出現之前,內存中應用最多的是另外一種技術,就是Parity(奇偶校驗)。我們知道,在數字電路中,最小的數據單位就是叫「比特(bit)」,也叫數據「位」,「比特」也是內存中的最小單位,它是通過「1」和「0」來表示數據高、低電平信號的。在數字電路中8個連續的比特是一個位元組(byte),在內存中不帶「奇偶校驗」的內存中的每個位元組只有8位,若它的某一位存儲出了錯誤,就會使其中存儲的相應數據發生改變而導致應用程序發生錯誤。而帶有「奇偶校驗」的內存在每一位元組(8位)外又額外增加了一位用來進行錯誤檢測。比如一個位元組中存儲了某一數值(1、0、1、0、1、0、1、1),把這每一位相加起來(1+0+1+0+1+0+1+1=5)。若其結果是奇數,對於偶校驗,校驗位就定義為1,反之則為0;對於奇校驗,則相反。當CPU返回讀取存儲的數據時,它會再次相加前8位中存儲的數據,計算結果是否與校驗位相一致。當CPU發現二者不同時就作出視圖糾正這些錯誤,但Parity有個缺點,當內存查到某個數據位有錯誤時,卻並不一定能確定在哪一個位,也就不一定能修正錯誤,所以帶有奇偶校驗的內存的主要功能僅僅是「發現錯誤」,並能糾正部分簡單的錯誤。
通過上面的分析我們知道Parity內存是通過在原來數據位的基礎上增加一個數據位來檢查當前8位數據的正確性,但隨著數據位的增加Parity用來檢驗的數據位也成倍增加,就是說當數據位為16位時它需要增加2位用於檢查,當數據位為32位時則需增加4位,依此類推。特別是當數據量非常大時,數據出錯的幾率也就越大,對於只能糾正簡單錯誤的奇偶檢驗的方法就顯得力不從心了,正是基於這樣一種情況,一種新的內存技術應允而生了,這就是ECC(錯誤檢查和糾正),這種技術也是在原來的數據位上外加校驗位來實現的。不同的是兩者增加的方法不一樣,這也就導致了兩者的主要功能不太一樣。它與Parity不同的是如果數據位是8位,則需要增加5位來進行ECC錯誤檢查和糾正,數據位每增加一倍,ECC只增加一位檢驗位,也就是說當數據位為16位時ECC位為6位,32位時ECC位為7位,數據位為64位時ECC位為8位,依此類推,數據位每增加一倍,ECC位只增加一位。總之,在內存中ECC能夠容許錯誤,並可以將錯誤更正,使系統得以持續正常的操作,不致因錯誤而中斷,且ECC具有自動更正的能力,可以將Parity無法檢查出來的錯誤位查出並將錯誤修正。
2 ECC(Elliptic Curve Cryptosystems )橢圓曲線密碼體制
2002年,美國SUN公司將其開發的橢圓加密技術贈送給開放源代碼工程
公鑰密碼體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。有時也把橢圓曲線類歸為離散對數類。
橢圓曲線密碼體制來源於對橢圓曲線的研究,所謂橢圓曲線指的是由韋爾斯特拉斯(Weierstrass)方程:
y2+a1xy+a3y=x3+a2x2+a4x+a6 (1)
所確定的平面曲線。其中系數ai(I=1,2,…,6)定義在某個域上,可以是有理數域、實數域、復數域,還可以是有限域GF(pr),橢圓曲線密碼體制中用到的橢圓曲線都是定義在有限域上的。
橢圓曲線上所有的點外加一個叫做無窮遠點的特殊點構成的集合連同一個定義的加法運算構成一個Abel群。在等式
mP=P+P+…+P=Q (2)
中,已知m和點P求點Q比較容易,反之已知點Q和點P求m卻是相當困難的,這個問題稱為橢圓曲線上點群的離散對數問題。橢圓曲線密碼體制正是利用這個困難問題設計而來。橢圓曲線應用到密碼學上最早是由Neal Koblitz 和Victor Miller在1985年分別獨立提出的。
橢圓曲線密碼體制是目前已知的公鑰體制中,對每比特所提供加密強度最高的一種體制。解橢圓曲線上的離散對數問題的最好演算法是Pollard rho方法,其時間復雜度為,是完全指數階的。其中n為等式(2)中m的二進製表示的位數。當n=234, 約為2117,需要1.6x1023 MIPS 年的時間。而我們熟知的RSA所利用的是大整數分解的困難問題,目前對於一般情況下的因數分解的最好演算法的時間復雜度是子指數階的,當n=2048時,需要2x1020MIPS年的時間。也就是說當RSA的密鑰使用2048位時,ECC的密鑰使用234位所獲得的安全強度還高出許多。它們之間的密鑰長度卻相差達9倍,當ECC的密鑰更大時它們之間差距將更大。更ECC密鑰短的優點是非常明顯的,隨加密強度的提高,密鑰長度變化不大。
德國、日本、法國、美國、加拿大等國的很多密碼學研究小組及一些公司實現了橢圓曲線密碼體制,我國也有一些密碼學者做了這方面的工作。許多標准化組織已經或正在制定關於橢圓曲線的標准,同時也有許多的廠商已經或正在開發基於橢圓曲線的產品。對於橢圓曲線密碼的研究也是方興未艾,從ASIACRYPTO』98上專門開辟了ECC的欄目可見一斑。
在橢圓曲線密碼體制的標准化方面,IEEE、ANSI、ISO、IETF、ATM等都作了大量的工作,它們所開發的橢圓曲線標準的文檔有:IEEE P1363 P1363a、ANSI X9.62 X9.63、 ISO/IEC14888等。
2003年5月12日中國頒布的無線區域網國家標准 GB15629.11 中,包含了全新的WAPI(WLAN Authentication and Privacy Infrastructure)安全機制,能為用戶的WLAN系統提供全面的安全保護。這種安全機制由 WAI和WPI兩部分組成,分別實現對用戶身份的鑒別和對傳輸的數據加密。WAI採用公開密鑰密碼體制,利用證書來對WLAN系統中的用戶和AP進行認證。證書裡麵包含有證書頒發者(ASU)的公鑰和簽名以及證書持有者的公鑰和簽名,這里的簽名採用的就是橢圓曲線ECC演算法。
加拿大Certicom公司是國際上最著名的ECC密碼技術公司,已授權300多家企業使用ECC密碼技術,包括Cisco 系統有限公司、摩托羅拉、Palm等企業。Microsoft將Certicom公司的VPN嵌入微軟視窗移動2003系統中。