個(gè)人對(duì)數(shù)據(jù)安全理解是:
算法是公開的抬纸,在當(dāng)前世界算力下咙俩,理論上不可破解的,是靠秘鑰來保證安全的松却,不是算法本身暴浦。
在我們?nèi)粘5拈_發(fā)過程中,我們開發(fā)人員保證數(shù)據(jù)安全晓锻,主要通過四個(gè)手段歌焦。
一 .HASH
通過對(duì)數(shù)據(jù)的簽名(其實(shí)就是對(duì)數(shù)據(jù)進(jìn)行HASH)保證傳輸過程中數(shù)據(jù)不被篡改。
如:微信的 “微信公眾平臺(tái)的接入” 的數(shù)據(jù)簽名(signature)砚哆,保證消息的確來自微信服務(wù)器独撇,并沒有被篡改過。
1 .hash算法是內(nèi)容摘要算法,是有損的纷铣,不可逆的卵史,固定長(zhǎng)度,輸入改變一點(diǎn)搜立,輸出千差萬別以躯,但可能產(chǎn)生碰撞(可以參考王小云教授的構(gòu)造md5值),這里的hash算法可以是:md5或sha1等啄踊,如下圖:
2 .數(shù)據(jù)發(fā)送方和接收方用同樣的方式(數(shù)據(jù)忧设,key,hash算法)進(jìn)行 hash生成signature值颠通。其中key是雙方約定的址晕,并對(duì)第三方是絕對(duì)保密的,如果在傳輸過程中顿锰,其中某個(gè)數(shù)據(jù)被篡改谨垃,那么接收方收到的signature和接收方自己hash出的signature值就不相等,這樣保證數(shù)據(jù)的正確性硼控。
二 . AES
通過數(shù)據(jù)進(jìn)行對(duì)稱加密(主要是AES)刘陶,保證數(shù)據(jù)傳輸過程中數(shù)據(jù)不被泄密。
如:微信的 “微信公眾平臺(tái)的接入” 的數(shù)據(jù)加密傳輸淀歇。
之所以是對(duì)稱加密易核,指的是這里加密和解密用的是一個(gè)秘鑰key匈织,秘鑰key是雙方約定的浪默,并對(duì)第三方是絕對(duì)保密的,如果秘鑰key泄露了缀匕,或者擁有秘鑰key的人作惡了纳决,就不安全了。對(duì)稱加密的速度比較快乡小。
三 . RSA - 公鑰加密阔加,私鑰機(jī)密
通過非對(duì)稱加密(RSA)的公鑰對(duì)數(shù)據(jù)進(jìn)行加密,然后通過私鑰對(duì)應(yīng)的私鑰對(duì)數(shù)據(jù)進(jìn)行解密满钟,也是保證數(shù)據(jù)傳輸過程中數(shù)據(jù)不被泄密胜榔,非對(duì)稱加密的速度比較慢。
如:https的ssl協(xié)議
具體步驟:
- 主要的流程是通過openssl等工具生成一對(duì)公私鑰對(duì)夭织,圖中public key 就是生成的公鑰,private key 就是生成的私鑰吠撮,公鑰可以公開給任何人尊惰,私鑰是自己絕對(duì)保密。plaintext是明文,ciphertext是密文弄屡,encryption是加密操作题禀,decryption是解密操作,具體步驟:
- 明文(plaintext)通過公鑰進(jìn)行加密加密操作獲得一個(gè)密文(ciphertext)
- 密文(ciphertext)通過私鑰解密再解密成明文(plaintext)
注意:
加密只能用公鑰膀捷,解密只能用私鑰迈嘹,不要問為什么,這是被數(shù)學(xué)證明過的全庸。
四 . RSA - 私鑰加密江锨,公鑰解密
通過非對(duì)稱加密(RSA)的私鑰對(duì)數(shù)據(jù)進(jìn)行加密,然后通過公鑰對(duì)應(yīng)的私鑰對(duì)數(shù)據(jù)進(jìn)行解密糕篇,為了證明加密著的身份啄育,用于身份確認(rèn),
如:銀行發(fā)的U盾拌消,證書挑豌。
具體步驟:
- 生成公私鑰對(duì)和上面一樣墩崩,通過openssl等工具生成一對(duì)公私鑰對(duì)氓英,圖中public key 就是生成的公鑰,private key 就是生成的私鑰鹦筹,公鑰可以公開給任何人铝阐,私鑰是自己絕對(duì)保密。plaintext是明文铐拐,ciphertext是密文徘键,encryption是加密操作,decryption是解密操作遍蟋,具體步驟正好和上面密碼過程相反:
- 明文(plaintext)通過私鑰進(jìn)行加密加密操作獲得一個(gè)密文(ciphertext)吹害。
- 密文(ciphertext)通過公鑰解密再解密成明文(plaintext),如果能夠被成功解密虚青,就能證明加密者的身份它呀。
注意:
加密只能用私鑰,解密只能用公鑰棒厘,不要問為什么纵穿,這也是被數(shù)學(xué)證明過的。意思就是加密者加密一個(gè)密文奢人,然后發(fā)給別人谓媒,別人如果能用加密者的公鑰解密(公鑰是全世界公開的),就能說明這個(gè)密文一定是被加密者用他的私鑰加密過的达传。
私鑰萬萬不能泄密篙耗,泄密了別人就會(huì)冒充你的身份迫筑。
私鑰除了不能泄密,還要保證一定不能丟失宗弯。
比如:比特幣賬戶都是匿名的脯燃,賬戶是靠用戶保存私鑰來保證安全的,有很多人忘記了私鑰蒙保,結(jié)果就是僵尸賬戶辕棚。