個人對數據安全理解是:
算法是公開的,在當前世界算力下,理論上不可破解的,是靠秘鑰來保證安全的,不是算法本身。
在我們日常的開發過程中,我們開發人員保證數據安全,主要通過四個手段。
一 .HASH
通過對數據的簽名(其實就是對數據進行HASH)保證傳輸過程中數據不被篡改。
如:微信的 “微信公眾平臺的接入” 的數據簽名(signature),保證消息的確來自微信服務器,并沒有被篡改過。
1 .hash算法是內容摘要算法,是有損的,不可逆的,固定長度,輸入改變一點,輸出千差萬別,但可能產生碰撞(可以參考王小云教授的構造md5值),這里的hash算法可以是:md5或sha1等,如下圖:
Hash算法
2 .數據發送方和接收方用同樣的方式(數據,key,hash算法)進行 hash生成signature值。其中key是雙方約定的,并對第三方是絕對保密的,如果在傳輸過程中,其中某個數據被篡改,那么接收方收到的signature和接收方自己hash出的signature值就不相等,這樣保證數據的正確性。
二 . AES
通過數據進行對稱加密(主要是AES),保證數據傳輸過程中數據不被泄密。
如:微信的 “微信公眾平臺的接入” 的數據加密傳輸。
之所以是對稱加密,指的是這里加密和解密用的是一個秘鑰key,秘鑰key是雙方約定的,并對第三方是絕對保密的,如果秘鑰key泄露了,或者擁有秘鑰key的人作惡了,就不安全了。對稱加密的速度比較快。
三 . RSA - 公鑰加密,私鑰機密
通過非對稱加密(RSA)的公鑰對數據進行加密,然后通過私鑰對應的私鑰對數據進行解密,也是保證數據傳輸過程中數據不被泄密,非對稱加密的速度比較慢。
如:https的ssl協議
具體步驟:
- 主要的流程是通過openssl等工具生成一對公私鑰對,圖中public key 就是生成的公鑰,private key 就是生成的私鑰,公鑰可以公開給任何人,私鑰是自己絕對保密。plaintext是明文,ciphertext是密文,encryption是加密操作,decryption是解密操作,具體步驟:
- 明文(plaintext)通過公鑰進行加密加密操作獲得一個密文(ciphertext)
- 密文(ciphertext)通過私鑰解密再解密成明文(plaintext)
注意:
加密只能用公鑰,解密只能用私鑰,不要問為什么,這是被數學證明過的。
四 . RSA - 私鑰加密,公鑰解密
通過非對稱加密(RSA)的私鑰對數據進行加密,然后通過公鑰對應的私鑰對數據進行解密,為了證明加密著的身份,用于身份確認,
如:銀行發的U盾,證書。
具體步驟:
- 生成公私鑰對和上面一樣,通過openssl等工具生成一對公私鑰對,圖中public key 就是生成的公鑰,private key 就是生成的私鑰,公鑰可以公開給任何人,私鑰是自己絕對保密。plaintext是明文,ciphertext是密文,encryption是加密操作,decryption是解密操作,具體步驟正好和上面密碼過程相反:
- 明文(plaintext)通過私鑰進行加密加密操作獲得一個密文(ciphertext)。
- 密文(ciphertext)通過公鑰解密再解密成明文(plaintext),如果能夠被成功解密,就能證明加密者的身份。
注意:
加密只能用私鑰,解密只能用公鑰,不要問為什么,這也是被數學證明過的。意思就是加密者加密一個密文,然后發給別人,別人如果能用加密者的公鑰解密(公鑰是全世界公開的),就能說明這個密文一定是被加密者用他的私鑰加密過的。
私鑰萬萬不能泄密,泄密了別人就會冒充你的身份。
私鑰除了不能泄密,還要保證一定不能丟失。
比如:比特幣賬戶都是匿名的,賬戶是靠用戶保存私鑰來保證安全的,有很多人忘記了私鑰,結果就是僵尸賬戶。