私钥的安全保护

公私钥体系是目前整个安全体系的基石,肩负着加密及用户认证的重担。但是,落实在计算机系统中,私钥仅仅是一个一般的文件。可以被窥视,甚至被拷贝。如何防止这种情况的发生呢?今天,我们就来谈一谈私钥的安全保护。

一般的,当我们用命令ssh-keygen -t rsa产生对称密钥时,会出现如下提示:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 

其中,第一次是询问我们把私钥存储在什么位置,第二次则是要我们设置一个passphrase。那么这个passphrase是个什么东西呢?简而言之,它是用来对我们私钥进行加密的对称密钥

如果打开一个设置了passphrase的私钥,我们可以看到

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,D54228DB5838E32589695E83A22595C7

3+Mz0A4wqbMuyzrvBIHx1HNc2ZUZU2cPPRagDc3M+rv+XnGJ6PpThbOeMawz4Cbu
lQX/Ahbx+UadJZOFrTx8aEWyZoI0ltBh9O5+ODov+vc25Hia3jtayE51McVWwSXg
wYeg2L6U7iZBk78yg+sIKFVijxiWnpA7W2dj2B9QV0X3ILQPxbU/cRAVTd7AVrKT
... etc ...
-----END RSA PRIVATE KEY-----

其中头部值得关注,在DEK-Info中,有两部分信息:

  • 对称加密算法(AES-128-CBC)
  • 初始化向量(D54228DB5838E32589695E83A22595C7)

具体来说,在OpenSSL中,当使用passphrase做对称加密时

  • 1.程序会截取passphrase的前8个字节,作为盐,追加在你的passphrase后面
  • 2.使用md5对上面的结果做hash
  • 3.用该hash值对私钥进行对称加密

解密的过程,自然就不说了。但是,因为有了passphrase,即使私钥被盗,对方依然没办法使用,这就保护了我们的私钥。

BTW,顺便看一眼没有设置passphrase的私钥:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEArCQG213utzqE5YVjTVF5exGRCkE9OuM7LCp/FOuPdoHrFUXk
y2MQcwf29J3A4i8zxpES9RdSEU6iIEsow98wIi0x1/Lnfx6jG5Y0/iQsG1NRlNCC
aydGvGaC+PwwWiwYRc7PtBgV4KOAVXMZdMB5nFRaekQ1ksdH/360KCGgljPtzTNl
09e97QBwHFIZ3ea5Eih/HireTrRSnvF+ywmwuxX4ubDr0ZeSceuF2S5WLXH2+TV0
... etc ... lots of base64 blah blah ...
-----END RSA PRIVATE KEY-----
The private key is an ASN.1 data structure, seri

Show Comments