Подписываем TLS-рукопожатия внутри TPM: ключ никогда не покидает чип
Signing TLS handshakes inside a TPM
Автор, занимаясь удалённой аттестацией конфиденциальных VM, делится решением: как использовать TPM для подписи TLS-рукопожатий, чтобы приватный ключ никогда не попадал в память процесса и не мог быть украден через дампы, core-файлы или снапшоты. Он объясняет, почему файловые права, короткоживущие сертификаты и KMS не дают такого же уровня защиты, и показывает библиотеку go-tpm-tls, которая позволяет использовать TPM-ключ как обычный tls.Certificate в Go. Код находит нужный ключ по публичному ключу из сертификата, а не по хендлу, что упрощает ротацию. Автор также разбирает требования TLS 1.3 к подписи и предостерегает от излишних ожиданий: TPM защищает от кражи ключа, но не от атак, когда злоумышленник уже имеет код внутри гостевой ОС.
Ключ в файле — это не настоящая идентичность машины. Это предъявительский документ, который случайно хранится на машине, и кто его прочитал, тот и становится этой машиной — где угодно, пока кто-нибудь не заметит и не отзовёт сертификат.