何為密碼學(xué)驾讲?
這里的密碼蚊伞,不是我們的登錄密碼。密碼學(xué)是指研究信息加密吮铭,破解密碼的技術(shù)科學(xué)时迫。密碼學(xué)的起源可追溯到2000年前。而當(dāng)今的密碼學(xué)是以數(shù)學(xué)為基礎(chǔ)的谓晌。
*在1976年以前掠拳,所有的加密方法都是同一種模式:加密、解密使用同一種算法纸肉。在交互數(shù)據(jù)的時候溺欧,彼此通信的雙方就必須將規(guī)則告訴對方,否則沒法解密柏肪。那么加密和解密的規(guī)則(簡稱密鑰)姐刁,它保護(hù)就顯得尤其重要。傳遞密鑰就成為了最大的隱患烦味。這種加密方式被成為對稱加密算法(symmetric encryption algorithm)
*1976年聂使,兩位美國計算機學(xué)家迪菲(W.Diffie)、赫爾曼(M.Hellman)提出了一種嶄新構(gòu)思谬俄,可以在不直接傳遞密鑰的情況下岩遗,完成密鑰交換。這被稱為“迪菲赫爾曼密鑰交換”算法凤瘦。開創(chuàng)了密碼學(xué)研究的新方向
*1977年三位麻省理工學(xué)院的數(shù)學(xué)家 羅納德·李維斯特(Ron Rivest)宿礁、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起設(shè)計了一種算法,可以實現(xiàn)非對稱加密蔬芥。這個算法用他們?nèi)齻€人的名字命名梆靖,叫做RSA算法。
RSA的數(shù)學(xué)原理
在上世紀(jì)70年代出現(xiàn)了一種加密算法笔诵,擁有兩個密鑰:公開密鑰簡稱公鑰(publickey)和私有密鑰簡稱私鑰(privatekey)返吻。公鑰加密,私鑰解密乎婿;私鑰加密测僵,公鑰解密。這個加密算法就是偉大的RSA。
離散對數(shù)問題
在整數(shù)中捍靠,離散對數(shù)(英語:Discrete logarithm)是一種基于同余運算和原根的一種對數(shù)運算沐旨。
而在實數(shù)中對數(shù)的定義是指對于給定的a和b。有一個x榨婆,使得磁携。相同地在任何群G中可為所有整數(shù)k定義一個冪數(shù)為,而離散對數(shù)是指使得的整數(shù)k良风。
離散對數(shù)在一些特殊情況下可以快速計算谊迄。然而,通常沒有具非常效率的方法來計算它們烟央。公鑰密碼學(xué)中幾個重要算法的基礎(chǔ)统诺,是假設(shè)尋找離散對數(shù)的問題解,在仔細(xì)選擇過的群中疑俭,并不存在有效率的求解算法篙议。
定義
當(dāng)模n有原根時,設(shè)l為模m的一個原根怠硼,則:
時:
此處的為x以整數(shù)l為底,模時的離散對數(shù)值移怯。
性質(zhì)
歐拉函數(shù)()
對于正整數(shù)n香璃,歐拉函數(shù)是小于或等于n的正整數(shù)中于n互質(zhì)的數(shù)的數(shù)目。
特點
*當(dāng)n是質(zhì)數(shù)的時候舟误,
*如果n可以分解為兩個互質(zhì)的整數(shù)之積葡秒,如?則?
根據(jù)這兩點,可得:
如果N是兩個質(zhì)數(shù)P1和P2的乘積嵌溢,則
歐拉定理
如果兩個整數(shù)m和n互質(zhì)眯牧,那么m的次方減1,可以被n整除
費馬小定理
歐拉定理的特殊情況:如果兩個正整數(shù)m和n互質(zhì)赖草,而且n為質(zhì)數(shù)学少!那么結(jié)果就是n-1
公式轉(zhuǎn)換
RSA的誕生
迪菲赫爾曼密鑰交換(Diffie–Hellman–Merkle key exchange)
RSA算法
說明:
1版确、n會非常大,長度一般為1024個二進(jìn)制位乎折。
2绒疗、由于需要求出,所以根據(jù)歐拉函數(shù)特點骂澄,最簡單的方式n由兩個質(zhì)數(shù)相乘得到:質(zhì)數(shù)P1吓蘑,P2【】
3、最終由得到e和d坟冲。
總共生成6個數(shù)字:p1磨镶,p2溃蔫,n,棋嘲,e酒唉,d
安全:
除了公鑰n和e,其余4個數(shù)字是不公開的沸移。
目前破解RSA得到d的方式:
1痪伦、想要求出私鑰d。由于雹锣。要知道e和网沾。
2、e是知道的蕊爵,但是要求得辉哥,就必須知道P1和P2。
3攒射、由于醋旦。只有將n進(jìn)行因數(shù)分解才能算出。
RSA文件密鑰創(chuàng)建
在Mac的終端下会放,可以直接操作OpenSSL進(jìn)行RSA命令的執(zhí)行饲齐。
Mac系統(tǒng)內(nèi)置的OpenSSL(開源加密庫)
常用指令
genrsa - 生成并輸入一個RSA私鑰
rsautl - 使用RSA密鑰進(jìn)行加密,解密咧最,簽名和驗證等運算
rsa - 處理RSA密鑰的格式轉(zhuǎn)換問題
創(chuàng)建密鑰
生成RSA私鑰捂人,私鑰長度為1024bit
$openssl genrsa -out private.pem 1024
從私鑰提取公鑰
$openssl rsa -in private.pem -putout -out public.pem
通過公鑰加密
$openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
通過私鑰解密
$openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
通過私鑰加密
$openssl rsautl -sign -in message.txt -inkey private.pem -out enc.txt
通過公鑰解密
$openssl rsautl -verify -in -enc.txt -inkey public.pem -pubin -out dec.txt
創(chuàng)建iOS開發(fā)使用的RSA文件(終端生成)
創(chuàng)建一個.csr文件(用于請求證書的文件)
$openssl req -new -key private.pem -out rsacert.csr
對RSA的private.pem進(jìn)行認(rèn)證
$openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
生成p12證書(私鑰)
$openssl pkcs12 -export -out p.12 -inkey private.pem -in rsacert.crt
生成der文件(公鑰)
$openssl x509 -outform der -in rsacert.crt -out rsacert.der
RSA特點
相對安全(非對稱加密,私鑰不用傳遞)
加密效率低
加密數(shù)據(jù)小