米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
DRANK
+ AES (crypto/aes) + GCM (crypto/cipher) Go 1.26以前のRSAハイブリッド暗号 1: // ====== 受信者(Recipient) ====== 2: // 3-1. RSA暗号化済みワンタイム共通鍵の長さを読み取る 3: var keyLen uint32 4: err := binary.Read(reader, binary.LittleEndian, &keyLen) 5: 6: // 3-2. RSA暗号化済みワンタイム共通鍵を取り出す 7: encryptedSessionKey := make([]byte, keyLen) 8: _, err := io.ReadFull(reader, encryptedSessionKey) 9: 10: // 3-3. ワンタイム共通鍵を復号 11: info := []byte("Encryption Key Label to Login") 12: sessionKey, err := rsa.DecryptOAEP(sha256.New(), rand.Reader, privKey, encryptedSessionKey, info) 13: 14: // 3-4. Nonceを取り出す 15: gcmNonceSize := 12 16: nonce := make([]byte, gcmNonceSize) 17: _, err := io.ReadFull(reader, nonce) 18: 19: // 3-5. 残りのデータをAES暗号文として読み込む 20: cipherText, err := io.ReadAll(reader) 21: 22: // 3-6. AES-GCMで復号 23: aad := []byte("Additional Authenticated Data to Tom") 24: block, err := aes.NewCipher(sessionKey) 25: gcm, err := cipher.NewGCM(block) 2…