个人对数据安全理解是:
算法是公开的,在当前世界算力下,理论上不可破解的,是靠秘钥来保证安全的,不是算法本身。
在我们日常的开发过程中,我们开发人员保证数据安全,主要通过四个手段。
一 .HASH
通过对数据的签名(其实就是对数据进行HASH)保证传输过程中数据不被篡改。
如:微信的 “微信公众平台的接入” 的数据签名(signature),保证消息的确来自微信服务器,并没有被篡改过。
1 .hash算法是内容摘要算法,是有损的,不可逆的,固定长度,输入改变一点,输出千差万别,但可能产生碰撞(可以参考王小云教授的构造md5值),这里的hash算法可以是:md5或sha1等,如下图:
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),如果能够被成功解密,就能证明加密者的身份。
注意:
加密只能用私钥,解密只能用公钥,不要问为什么,这也是被数学证明过的。意思就是加密者加密一个密文,然后发给别人,别人如果能用加密者的公钥解密(公钥是全世界公开的),就能说明这个密文一定是被加密者用他的私钥加密过的。
私钥万万不能泄密,泄密了别人就会冒充你的身份。
私钥除了不能泄密,还要保证一定不能丢失。
比如:比特币账户都是匿名的,账户是靠用户保存私钥来保证安全的,有很多人忘记了私钥,结果就是僵尸账户。