Ubuntu Linux下通過TPM保護SSH私鑰的安全

更新:前一陣子英飛凌(美國主要TPM廠家)的後門被挖出來了,直接做在了密鑰生成上面,通過特定方式可以極大降低RSA因數分解難度。雖然有了固件升級計劃,但這提醒我們不要信任美國政府,以及不要高估美國科技公司在面對他們時候的骨氣。

這個「漏洞」被提交為CVE-2017-15361,果然又是NSA最喜歡玩的那招,從密鑰生成上下手。

------

TPM,即可信平台模塊,在Windows Bitlocker下常常被用來加密磁碟,保存磁碟的對稱密鑰。可這一回,我要介紹的是TPM的另一種更高級的用法:通過TPM保護SSH私鑰的安全。

眾所周知,TPM晶元的原理和智能卡差不多,一個SoC晶元,裡面一個單片機做RSA、ECC等運算,並可以存儲私鑰 。私鑰一旦生成,即使有PIN也無法將其取出。這個特性最適合用來保護非對稱密鑰的安全。

1.TPM的選購

TPM一定要從境外購買!

TPM一定要從境外購買!

TPM一定要從境外購買!

重要的事情說三遍。國產TPM(一般是兆日的)都帶有公安部的介面,這意味著什麼你懂的 。我台式機上的TPM是從eBay上買的。如果你用的是筆記本/超級本,請一定從境外購機。

2.開始操作

首先,從BIOS里打開TPM,各個BIOS有不同的方法。

之後安裝軟體:

sudo apt install trousers tpm-tools simple-tpm-pk11

清空TPM:

tpm_clear --force

初始化TPM,獲取所有權:

tpm_takeownership

之後會提示你設置所有者密碼和SRK PIN,密碼最好不同:

Enter owner password:

Confirm password:

Enter SRK password:

Confirm password:

接著生成密鑰並配置這個用來為TPM提供PKCS11介面的工具:simple-tpm-pk11:

mkdir ~/.simple-tpm-pk11

cd ~/.simple-tpm-pk11

stpm-keygen -s -o ./my.key

然後會提示你輸入你設的SRK PIN:

Enter SRK PIN:

Modulus size: 256

Exponent size: 3

Size: 2048

Blob size: 559

生成好了密鑰,創建配置文件。在這裡需要填寫你的PIN,所以請保證你的目錄加密過。退出登陸後最好刪除該文件。

vim config

key my.key

srk_pin [SRK PIN]

然後進入SSH目錄,配置OpenSSH:

cd ~/.ssh

vim config

Host *

PKCS11Provider /usr/lib/x86_64-linux-gnu/libsimple-tpm-pk11.so

保存後,調用ssh-keygen,把剛才的my.key轉換成OpenSSH格式:

ssh-keygen -D /usr/lib/x86_64-linux-gnu/libsimple-tpm-pk11.so

顯示出來的就是你OpenSSH格式的公鑰。這個命令可以隨時運行,以調出你的公鑰。

這時在伺服器端配置好authorized_keys,連接:、

ssh user@domain.ip

成功就對了。


推薦閱讀:

如何儲存比特幣最安全?
國內真的有規定說密碼必須明文儲存嗎?
請解釋一下什麼是選擇明文攻擊及選擇密文攻擊?

TAG:Linux | 可信平台模块TPM | 信息安全和密码学 |