• 公開日:2025年10月16日
  • | 更新日:2025年10月28日

いまさら聞けない!暗号技術の基礎 Part2

情報セキュリティとは

情報セキュリティとは、各製品が扱うデータや情報を他者から守ることを言います。情報セキュリティというと、実際には、紙での資料なども入ってくるのですが、本記事ではデータに特化したサイバーセキュリティの観点で説明します。

具体的にはどうやって守っていくのか、ということを説明します。そこで重要なのが、情報セキュリティの三要素に、機密性、完全性、可用性というものがあります。

まず、機密性は、許可されていない人がデータにアクセスできないことです。万が一盗聴されても、データが漏れないようにするために、通信内容を暗号化し、製品内にデータを保存するときも暗号化し、アクセス制御のためにパスワードによる認証なども行い、データにアクセスすることを許可されていない人からデータを守ります。

次に、完全性は、データが改ざんや壊れずに完全なデータとして残っていることです。データが改ざんや壊れていなかを検証するには、メッセージ認証符号や署名といった技術を使用し検証することで、データの書き換えを許可されていない人からデータを守ります。

最後に、可用性については、許可された人が望んだ時にデータにアクセスできることです。データを失わないためにメモリを冗長化し、秘密分散といった技術が使われます。

表にまとめると下記の通りになります。

上記は、各要素に対して求められるものとそれを実現するための暗号技術を記載しています。

機密性に対して求められるものは、データの秘匿性であり、それを実現する暗号技術は、暗号化や認証となります。

完全性に対して求められるものは、データの正しさであり、それを実現する暗号技術は、メッセージ認証符号や署名となります。

可用性に対して求められるものは、データへのアクセスのしやすさであり、それを実現する暗号技術は、秘密分散となります。

※最後の可用性や秘密分散については、本記事では説明しません。「機密性」に関する暗号技術については、「いまさら聞けない!暗号技術の基礎 Part1 | 組込み技術ラボ」を参照ください。

 

メッセージ認証符号と署名

情報セキュリティの三要素の「完全性」に対して求められる「データの正しさ」を実現する暗号技術である「メッセージ認証符号や署名」、関連する暗号技術について説明しますが、その前に、ハッシュ関数について説明します。


【ハッシュ関数】

ハッシュ関数とはファイルや画像、動画などの任意のデータから、あらかじめ決められた範囲内の値を計算する関数です。また、ハッシュ関数の特性として、擬似乱数生成器や、擬似ランダム関数と同様に、同じデータを入力すると、常に同じ出力結果になります。ハッシュ関数は、相手に送ったテキストや画像・動画などの任意のデータが正しいかどうか、改ざんされてないかどうかのために使用されますので、以下の性質が求められます。

1点目は、出力サイズが一定ということで、例えば、SHA256というハッシュ関数は入力データが1byteでも1Mbyteでも出力のハッシュ値はいつでも256bitになります。基本的に、ハッシュ値のサイズより大きなデータはデータが欠損しているので、ハッシュ値から元のデータは復元ができません。ですので、ハッシュ関数でハッシュ値を求めることは、暗号化することではないのでご注意ください。

2点目は、一方向性になります。任意のデータのハッシュ値が分かったとしても元のデータの情報を得ることができないという性質を意味します。

3点目は、衝突困難性ですが、同じハッシュ値になる異なる2つのデータを見つけにくいといった性質になります。データを見つけにくいと書いたのは、実は、同じハッシュ値になる異なるデータは存在していて、SHA-1というハッシュ関数は、この衝突困難性が破られたので、現在では使用されていません。

次にハッシュ関数の使用例を説明します。

異なるデータから同じハッシュ値は生成されないため、ハッシュ値を用いることでデータが改ざんされていないことを確認でき検出もできます。

入手したファイルが、配布元のファイルのハッシュ値と同じであれば、同じファイルであることが確認できますし、入手したファイルが、配布元のファイルのハッシュ値と異なれば、改ざんされたことを検出可能となります。ハッシュ関数とハッシュ値はこのような形で利用できますので、メッセージ認証符号などで使用されています。


【メッセージ認証符号】

メッセージ認証について説明します。メッセージ認証符号とはデータの完全性を保証するための仕組みとなります。完全性とは冒頭で説明しましたが、データが書き換えられたり壊れたりしていないことを表す性質です。

事前に送信者と受信者の間で、秘密鍵を共有して、MAC生成関数を決めておきます。

次に、送信者はデータと秘密鍵からMAC生成関数を使ってMAC値を作り、データと一緒にMAC値を受信者に送ります。

その後、受信者は共有しておいた秘密鍵と受け取ったデータからMAC生成関数を使ってMAC値を作ります。

そのMAC値が受信したMAC値と同じであればデータを正常に受信できたことになります。

データのサイズにかかわらず、MAC値のサイズは一定です。暗号化とは異なり、MAC値から元のデータは復元できません。秘密鍵の共有を一度行えば、秘密鍵が漏洩しない限り繰り返し使えます。

MACには、上記図の「MAC生成関数」にあたる部分に、ハッシュ関数を使って構成するHMAC(Hash-based MAC)や、ブロック暗号を使って構成するCMAC(Cipher-based MAC)などの方式があります。

秘密鍵を使うという共通点で、共通鍵暗号との比較の表を記載しました。

MACにはセキュリティ3大要素の機密性に求められる秘匿性はありませんが、完全性はあります。共通鍵暗号には秘匿性はありますが、完全性はないです。秘匿性と完全性に関して、共通鍵暗号とは反対の性質を持ちます。知っている方はいるかもしれませんが、秘匿性があって、完全性もある認証付き暗号という暗号方式がございます。


【認証付き暗号】

認証付き暗号(Authenticated Encryption with Associated Data)は秘匿性と完全性を両立するように設計された暗号方式となります。

事前に送信者と受信者の間で、秘密鍵を共有して、AEADのアルゴリズムを決めておきます。

次に、送信者は平文とナンスと関連データと秘密鍵から、AEADを使って暗号文と認証タグを作り、ナンスと関連データと一緒に暗号文と認証タグを受信者に送ります。ここで言う、認証タグはMAC値と同等と考えて問題ございません。また、関連データとは、ユーザーIDや、通信プロトコルのバージョン情報などを使用したりします。

その後、受信者は共有しておいた秘密鍵と受け取った暗号文と認証タグ、ナンス、関連データからAEADを使って完全性のチェックと平文を復号します。ただし、暗号文や認証タグが不正な場合は、平文は出力されません。

認証付き暗号には、AES-GCMやChaCha20-Poly1305などの方式があります。

MACの説明時に記載した表に、AEADを追記しました。

AEADはセキュリティ3大要素の機密性に求められる秘匿性があって、完全性もあるMACと共通鍵暗号のいいとこ取りの暗号方式になります。


【署名】

署名の説明をします。署名はMACと同様にデータの完全性を保証するための仕組みになります。

事前に署名生成関数を決めておき、送信者側で署名鍵と検証鍵生成して、受信者に検証鍵を渡します。ここで言う、署名鍵は秘密鍵と同様で他者には知られてはいけない鍵になり、検証鍵は公開鍵と同様で他者に知られてもよい鍵となります。

次に、送信者はデータと署名鍵から署名生成関数を使って署名を作り、データと一緒に署名を受信者に送ります。

その後、受信者は共有しておいた検証鍵と受け取ったデータから署名生成関数を使って署名を作ります。

その署名が受信した署名と同じであればデータを正常に受信できたことになります。

MACと同様にデータのサイズにかかわらず、署名のサイズは一定です。暗号化とは異なり、署名から元のデータは復元できません。MACと何が違うかといいますと、MACは共通の秘密鍵で、MAC値の生成と検証を行っていましたが、署名は公開鍵暗号のように、署名する鍵と検証する鍵が異なります。

署名には楕円曲線を用いたECDSA(Elliptic Curve Digital Signature Algorithm)やEdDSA(Edwards-curve Digital Signature Algorithm)などの方式があります。

公開鍵を使うという共通点で、公開鍵暗号との比較の表を記載しました。

MACの時と同様に、署名にはセキュリティ3大要素の機密性に求められる秘匿性はありませんが、完全性はあります。

公開鍵暗号には秘匿性はありますが、完全性はないです。

秘匿性と完全性に関して、公開鍵暗号とは反対の性質を持ちます。

認証付き暗号のように署名付き暗号もあります。署名付き暗号についての説明については、割愛しますが、ここまでの内容を理解された方はなんとなく想像ができると思います。


【まとめ】

「いまさら聞けない!暗号技術の基礎 Part1」および「いまさら聞けない!暗号技術の基礎 Part2」で、様々な暗号技術について説明しましたが、これだけは覚えておいて欲しい内容をまとめました。

共通鍵暗号と公開鍵暗号の鍵の扱いと、MACと署名の鍵の扱いについてとなります。

共通鍵暗号では、暗号と復号で同じ鍵を使い、共に他者に見られてはいけない秘密鍵の使用となります。

公開鍵暗号では、暗号と復号で違う鍵を使い、暗号については他者に見られてもよい公開鍵の使用となります。

MACの鍵の扱いは共通鍵暗号と同等ですが、公開鍵暗号と署名の鍵の扱いの差分としては、送信者側で鍵を生成するか、受信者側で鍵を生成するかの違いになり、署名は、検証について他者に見られてもよい検証鍵の使用となります。また、MACと署名は暗号技術ではありますが、暗号化はしない、復号できない点も改めて覚えておいてください。

 

暗号技術を実現する製品はこちら

ルネサスのIoTセキュリティソリューション | セキュアな接続デバイス | Renesas ルネサス

自動車セキュリティ | Renesas ルネサス