【Linux】gpgコマンド 〜 AEAD / OCBモード 〜

◾️はじめに

https://dk521123.hatenablog.com/entry/2026/04/11/101026

で、「AEAD(Authenticated Encryption with Associated Data)」
について、少し触れたが、今回は深掘りする。

目次

【1】AEAD
 1)OCBモード
【2】使用上の注意
【3】AEADに関するあれこれ
 1)Publicキー作成手順
 2)作成手順
 3)確認方法

【1】AEAD

* AEAD
 = Authenticated Encryption with Associated Data
 = 関連データ付き認証付き暗号

* データの秘匿性(盗み見防止)と完全性・認証(改ざん防止・なりすまし防止)を
 同時に提供する暗号化方式

https://wiki.archlinux.jp/index.php/GnuPG

より抜粋
~~~~~~~
9.1 サポートされていない AEAD メカニズムを無効にする

gnupg 2.4 では、gpg は GnuPG 固有の AEAD 暗号化メカニズム (OCB に基づく) 
のサポートを通知するキーを生成します。
ただし、AEAD のこのフレーバーは、他の OpenPGP 実装ではサポートされていません。
~~~~~~~

1)OCBモード

* OCB (Offset Codebook)
* データの高速な暗号化と改ざん検知(認証付き暗号: AEAD)を同時に実現するモード
 => 従来の手法(CFB+MDC)よりも高速かつ安全で、
  大規模なファイルの暗号化処理に適している

gpgコマンド 〜 MDC 〜
https://dk521123.hatenablog.com/entry/2026/06/29/095627

モード 特徴 メリット デメリット
CFB (Cipher FeedBack) 従来 GPGなどで長年標準だった方式 互換性が高い 改ざん検知(MDC)を後付けしているため、処理がやや非効率。
GCM (Galois/Counter Mode) 普及期 Web(HTTPS通信)などで主流のAEAD 特許の制約がなく広く普及 計算がやや複雑で、OCBに比べると速度で劣る場合がある。
OCB (Offset Codebook) 現代 高速性を追求したAEAD とにかく高速で安全 過去に特許制限があったため普及が遅れた(現在は特許フリー)。

【2】使用上の注意

* OCBモード/AEADは、OpenPGPの標準仕様としては新しいため、
 古いバージョンのGPG(旧システム)や他のOpenPGP実装ソフトウェアとの間で
 互換性の問題が生じる可能性がある

 => GnuPG 2.2以降でサポート
  ( OCBモードによる復号はGnuPGバージョン2.2.21以降で対応 )
 => 実際に「PGPy」では、AEADが未サポートだった。

Python 〜 PGPy 〜
https://dk521123.hatenablog.com/entry/2026/04/11/101026

【3】AEADに関するあれこれ

1)Publicキー作成手順

gpg full-generate-key

# kind: ECC (sign and encrypt)
# curve: Curve25519/Ed25519
# UID: Demo AEAD <demo@example.com>

2)作成手順

* Optionに関する詳細は以下の公式ドキュメント参照

https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Options.html

[1] 共通鍵暗号方式(パスフレーズ)

gpg --symmetric --use-ocb-sym <対象のファイル名>
Options short option Explanations Note
--symmetric -c パスフレーズ(パスワード)を使用してファイルを暗号化 symmetric(シンメトリック)=対称的な
--use-ocb-sym - 暗号化モードとして従来の CFB+MDC の代わりに OCB を適用

[2] 公開鍵暗号方式(受信者の鍵)

gpg --encrypt --recipient <EMAIL> --force-ocb <対象のファイル名>
Options short option Explanations Note
--encrypt -e ファイル暗号化
--recipient EMAIL -r EMAIL 宛先指定
--force-ocb - OCB を矯正適用

3)確認方法

gpg --list-packets <対象のファイル名>

# さらに詳しく
gpg --vv --list-packets <対象のファイル名>

# 結果が以下のような文言が出るはず。
# gpg: AES256.OCB encrypted data
# :aead encrypted packet: cipher=9 aead=2

関連記事

gpgコマンド 〜 入門編 〜
https://dk521123.hatenablog.com/entry/2026/02/12/143942
gpgコマンド 〜基本編 〜
https://dk521123.hatenablog.com/entry/2026/04/08/160351
gpgコマンド 〜 MDC 〜
https://dk521123.hatenablog.com/entry/2026/06/29/095627
Python 〜 python-gnupg / 入門編 〜
https://dk521123.hatenablog.com/entry/2025/10/18/222208
MWAA ~ gpg/python-gnupgを使うには ~
https://dk521123.hatenablog.com/entry/2026/06/12/001707