マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

上記の暗号化アルゴリズムの

などのポイント解説と、

.NETのライブラリとして提供されている「暗号化アルゴリズム」を纏める。

暗号化・復号化の流れ

暗号化

  1. アルゴリズムに対応したブロック長に分割する。
  2. ブロック長に満たない部分をパディング方式で補完する。
  3. 暗号鍵を用いてアルゴリズムで暗号化する。
  4. 分割されたデータを結合する。

復号化

  1. アルゴリズムに対応したブロック長に分割する。
  2. 暗号鍵を用いてアルゴリズムで復号化する。
  3. 補完された部分をパディング方式で除去する。
  4. 分割されたデータを結合する。

基礎用語

ブロック暗号化

暗号化モード(暗号利用モード)

パディングモード(パディング方式)

初期値(IV:初期化ベクトル)

ハッシュ化

ハッシュ化とは、「暗号学的ハッシュ関数」を用いて指定のメッセージのハッシュ値を求める行為である。

また、「暗号学的ハッシュ関数」には、次のようなことが求められているため、
既成の「暗号学的ハッシュ関数」を使用した場合、これらは満たされているものとして利用できる。

暗号学的ハッシュ関数

暗号学的ハッシュ関数

情報セキュリティ分野で

など、様々に利用されている。

また、通常のハッシュ関数としても利用でき、

などの用途にも利用されている 。

暗号学的ハッシュ関数の安全性

キーなし方式・あり方式

「暗号学的ハッシュ関数」には、

「暗号学的ハッシュ関数」自体は不可逆であるものの、
「キーなし方式」の場合、辞書攻撃 により、容易にメッセージが割れる可能性がある。
このため、辞書攻撃を防ぐ場合、「キーあり方式」を採用する。

衝突耐性

「暗号学的ハッシュ関数」を使用する際は、
最新の「ハッシュの衝突耐性」の情報を入手する事が推奨される。
これは、例えば、2010/5現在、MD5、SHA-0、SHA-1について
「強衝突耐性」が突破される脆弱性が発見されているためである。

ただし、「強衝突耐性」が突破されても、直ちに、これらの「暗号学的ハッシュ関数」を用いている
暗号化通信が盗聴・改竄されたり、電子署名の有効性が無くなったりすると言うわけではない。
これは、将来的な「弱衝突耐性」の突破を示唆し、「弱衝突耐性」が突破された場合は、
暗号化通信や電子署名の無改竄性を証明できなくなる。

.NETの暗号学的ハッシュ関数のプロバイダ

キーなし方式

キーあり方式

参考

ハッシュ値

「メッセージ ダイジェスト」、あるいは単に「ダイジェスト」と呼ぶことがある。
認証アルゴリズムの「ダイジェスト認証」や、「チャレンジ&レスポンス認証」で使用されている。

目的によってはハッシュ値のことを「フィンガープリント」、「チェックサム」とも呼ぶ。

辞書攻撃

あらかじめメッセージ(例えば、ここでは、メッセージ = パスワードとする)として
利用され易いキーワードを、暗号化プロバイダ毎にハッシュ化し、ハッシュ値をDBに格納しておく。
次に入手したパスワードのハッシュを、このDB上で検索すると、元のパスワードを引く事が出来る。

暗号化

暗号化の方式には、大きく分けて、

の2つの方式がある。

以下の表に「秘密鍵・暗号化方式」と、「公開鍵・暗号化方式」との比較を示す。

なお、両者のメリット・デメリットを考慮し、両者を組み合わせたハイブリッドの方式もある。
これについては、「ハイブリッド・暗号化方式」の項にて説明する。

暗号化方式の比較

秘密鍵・暗号化

概要

アルゴリズム

.NETの秘密鍵・暗号化方式のプロバイダ

公開鍵・暗号化

シーケンス

アルゴリズム

.NETの公開鍵・暗号化方式のプロバイダ

.NETにて提供されるRSACryptoServiceProvider?を使用した場合、

なお、リプレイ攻撃とは、ユーザがログインするときにネットワークを流れる電文を盗聴し、
これを自分の送信する電文として利用することでシステムへ不正にログインしようとする行為を指す。

ハイブリッド・暗号化

秘密鍵・暗号化公開鍵・暗号化の両者のメリットとデメリットを考慮し、
組み合わせた「ハイブリッド・暗号化方式」もある。
一般的には、アリスとボブ - Wikipediaで知られている。

シーケンス

アルゴリズム

.NETの公開鍵・暗号化方式のプロバイダ

デジタル署名

概要

「デジタル署名」は、元となるメッセージのハッシュを秘密鍵で暗号化したものである。

送信元が、この「デジタル署名」を、元となるメッセージと同梱して送付することにより、
送信先は、元となるメッセージの正当性を(= 改ざんされていない事を)検証できる。

シーケンス

アルゴリズム

.NETのデジタル署名のプロバイダ

「デジタル署名」では、秘密鍵・公開鍵のキー・ペアを、プロバイダを使用して生成する必要がある。

認証

メッセージ認証符号(MAC)

概要

メッセージ認証符号 - Wikipedia(MAC: Message Authentication Code)
メッセージ認証完全性コード(MAIC: Message Authentication and Integrity Code)とも呼ばれる。

シーケンス

https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E8%AA%8D%E8%A8%BC%E7%AC%A6%E5%8F%B7#/media/File:MAC.svg

例:SSH2のトランスポート層のデータ一貫性を確保するためのMAC用の共通鍵を、
ハイブリッド・暗号化ECDHで生成された共通鍵からハッシュ関数によって生成される。

アルゴリズム

MACアルゴリズムは他の暗号プリミティブから構築できる。

APIインターフェイス

.NETのメッセージ認証符号(MAC)のプロバイダ

認証付き暗号(AEAD)

概要

認証付き暗号 - Wikipedia(AE: Authenticated Encryption あるいは AEAD: Authenticated Encryption with Associated Data)

シーケンス

アルゴリズム

6種類の異なるモードが、
ISO/IEC 19772:2009 によって標準化され、
さらにNISTによって開発がすすめられた。

APIインターフェイス

AEADの典型的な APIインターフェイス は次のような関数を提供する:

.NETの認証付き暗号のプロバイダ

参考

暗号についての概要や体系や、各種の「暗号化アルゴリズム」の詳細については、
説明しないので、これについては、下記サイトや、他の情報源を参照のこと。

RFC

RFC4949 Internet Security Glossary, Version 2

Wikipedia

ハッシュ関数

共通鍵暗号

公開鍵暗号

その他

Qiita

デジタル証明書

デジタル証明書」の検証は、「送信側の公開鍵」を拠り所にしていると言えるが、提供される「送信側の公開鍵」の出所が、正規の出所か、検証できない(場合がある)という問題がある。
このため、この問題を解決するための、「認証局」と呼ばれる、信頼のおける第三者が発行した「デジタル証明書」を使用して「送信側の公開鍵」が信頼できるものであるかを検証する機構がある。

暗号の年問題

なお、各種の「暗号化アルゴリズム」の「安全性」の問題については、
日々、調査・研究が進められていため、NIST やCRYPTREC などから
公にアナウンスされる情報源を確認のこと。

.NETの署名・暗号化アルゴリズム

.NET Framework、.NET Coreのライブラリで提供される署名・暗号化アルゴリズム


Tags: :セキュリティ, :暗号化


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS