Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

認証付き暗号(ニンショウツキアンゴウ)とは | 意味や読み方など丁寧でわかりやすい用語解説

認証付き暗号(ニンショウツキアンゴウ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

認証付き暗号 (ニンショウツキアンゴウ)

英語表記

authenticated encryption (オーセンティケイテッド エンクリプション)

用語解説

認証付き暗号とは、データを暗号化して内容を秘密にする「機密性」と、データが途中で改ざんされていないことを保証する「完全性」、そしてデータが正規の送信者から送られたものであることを確認する「真正性」の三つのセキュリティ要素を、単一のアルゴリズムで同時に実現する暗号化方式である。現代のセキュアな通信やデータ保存において、その利用は広く推奨されている。

従来の暗号化方式では、データの内容を第三者から保護するために暗号化(機密性の確保)を行い、データの改ざんを検知するために別途メッセージ認証コード(MAC)やデジタル署名といった認証技術を適用することが一般的であった。これは、暗号化がデータを秘密にする役割を果たし、認証がデータの整合性と送信元の確認を行う役割を担うというように、それぞれのセキュリティ機能が独立して提供されることを意味する。しかし、この二つの機能を別々に適用する方式には、システム設計者や開発者が誤った手順で組み合わせることで、セキュリティ上の脆弱性が生まれるリスクがあった。例えば、暗号化する前に認証を適用したり、暗号化後に認証タグを付与する際に検証方法に不備があったりすると、たとえデータが暗号化されていたとしても、攻撃者によって巧妙に改ざんされた暗号文が、復号時にエラーとして検出されずに受け入れられてしまう可能性があったのだ。このような状態では、情報が秘密にされているにもかかわらず、その情報が正しいものだという保証がないため、重大なセキュリティインシデントにつながりかねない。特に、暗号文の一部を操作することで、復号された平文が攻撃者の意図する内容に変わってしまう、といった攻撃手法も存在する。

認証付き暗号は、このような課題を解決するために考案された。この方式では、暗号化と認証のプロセスが密接に統合されており、データの機密性を保ちながら、そのデータが改ざんされていないこと、そして正当な送信元から送られてきたことを一度に保証する。これにより、別々に実装する際の複雑性や、誤った組み合わせによるセキュリティリスクを大幅に低減できる。

認証付き暗号の具体的な動作原理は、暗号化処理の過程で「認証タグ」と呼ばれる短いデータも同時に生成するところにある。この認証タグは、元の平文と、それから生成された暗号文の両方、またはその一部に基づいて計算される。さらに、認証付き暗号の中には、暗号化されないものの認証の対象に含めたいデータ(例えば、通信プロトコルのヘッダ情報など)を「付随データ」として含めることができるものもある。これにより、特定の情報が平文で送られても、それが改ざんされていないことを確認できるため、より柔軟なセキュリティ設計が可能になる。

データの送信側では、平文を認証付き暗号アルゴリズムに入力し、暗号文と認証タグを生成する。そして、これら二つをセットにして受信側に送信する。受信側では、受け取った暗号文と認証タグ、そして共有している鍵を用いて、認証処理を行う。もし、受け取った認証タグが、受信側で計算された認証タグと一致しなければ、そのデータは途中で改ざんされたか、あるいは正しくない送信元から送られてきたと判断され、復号処理は行われずに破棄される。認証が成功した場合にのみ、暗号文は復号され、その内容が信頼できるものとして扱われる。この仕組みにより、攻撃者が暗号文の一部を改ざんしようと試みても、認証タグが一致しないため、改ざんされた情報がシステムに受け入れられることはない。

代表的な認証付き暗号アルゴリズムには、AES-GCM(Advanced Encryption Standard - Galois/Counter Mode)やChaCha20-Poly1305などがある。これらは、現代の多くのセキュアな通信プロトコル(例えば、TLS/SSL)やデータストレージシステムで採用されており、その高い安全性と効率性から広く利用されている。認証付き暗号の導入により、開発者はセキュリティ実装の複雑さに悩まされることなく、堅牢なシステムを構築できるようになった。暗号化と認証を常にセットで考えるという、現代のセキュリティ設計における基本原則を体現する技術だと言える。システムエンジニアを目指す者にとって、この認証付き暗号の概念は、セキュアなシステム開発を行う上で不可欠な知識である。

関連コンテンツ