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: 256Exponent size: 3Size: 2048Blob 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
成功就對了。
推薦閱讀: