暗号利用モードのソースを表示
←
暗号利用モード
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{Redirect|IGE|In Ground Effect|地面効果}} '''暗号利用モード'''(あんごうりようモード、''Block cipher modes of operation'')とは、[[ブロック暗号]]を利用して、ブロック長よりも長いメッセージを[[暗号化]]するメカニズムのことである。 ECBモード(単純なブロック暗号の利用法)では、ある鍵で同一の平文を暗号化すると、同一の暗号文になる。したがって、長いメッセージ(画像データなど)のある部分が他の部分と同じであるかどうかが、暗号文の比較によって判断できてしまうので、他のモードが必要となった。 暗号利用モードには、秘匿用の利用モードと、認証用の利用モードとがある。 == 秘匿用の利用モード == 秘匿用として多くの暗号利用モードが定義されており、これらのうち、ECB, CBC, OFB, CFBの4つは、[[Federal Information Processing Standards|FIPS]], [[ANSI]]のほか、[[国際標準化機構|ISO]]、[[日本工業規格|JIS]]で規格化されている。またCTRは、[[Advanced Encryption Standard|AES]]制定の際に追加されたモードである。 代表的な暗号利用モードを以下に示す。以下の説明で、 <math>C_i</math>は暗号化後のi番目のブロック、<math>M_i</math>は暗号化前のi番目のブロック、<math>E_K(\_)</math>はブロック暗号処理を表す。 === {{Anchors|ECB}}Electronic Codebook (ECB) === {{Infobox |name = |bodystyle = |title = |titlestyle = |image = |imagestyle = |caption = |captionstyle = |headerstyle = background:#ccf; |labelstyle = background:#ddf; |datastyle = |header1 = ECB |label1 = |data1 = |header2 = |label2 = |data2 = Electronic Codebook |header3 = |label3 = 暗号化処理の並列化: |data3 = 可 |header4 = |label4 = 復号処理の並列化: |data4 = 可 |header5 = |label5 = Random Read: |data5 = 可 |belowstyle = background:#ddf; |below = }} '''ECBモード''' ('''Electronic Codebook Mode''') は、もっとも単純な暗号利用モードである。メッセージはブロックに分割され、それぞれのブロックは独立して暗号化される。 [[File:ECB encryption.svg]] [[File:ECB decryption.svg]] ECBモードの欠点は、同じ鍵を用いた場合には、同じ[[平文]]ブロックを暗号化した結果の[[暗号文]]ブロックが常に同じとなることである。このため、データのパターンを隠蔽することができない。メッセージの機密性の保持には向かず、暗号化プロトコルにおける使用は推奨されない。同じ入力に対して常に同じ出力を返すことから、ECBモードは[[反射攻撃]]に対しても脆弱である。 ECBモードにおいてデータのパターンがどの程度残されるかを、ビットマップ画像の暗号化を用いて説明する。各々のピクセルの色情報を暗号化しても、暗号化処理後の画像にはピクセルごとの色情報のパターンが残留している。 {{multiple image | align = center | image1 = Tux.jpg | caption1 = 元画像 | image2 = Tux ecb.jpg | caption2 = ECBモードでの暗号化 | image3 = Tux secure.jpg | caption3 = ECBモード以外での暗号化 | footer = 右の画像は、CBC、CTRなどECBモード以外での暗号化における結果の例である。ランダムなノイズのように見えることが安全に暗号化されていることを必ずしも意味しないことには注意する必要がある。 | width = 196 }} === {{Anchors|CBC}}Cipher Block Chaining (CBC) === {{Infobox |name = |bodystyle = |title = |titlestyle = |image = |imagestyle = |caption = |captionstyle = |headerstyle = background:#ccf; |labelstyle = background:#ddf; |datastyle = |header1 = CBC |label1 = |data1 = |header2 = |label2 = |data2 = Cipher Block Chaining |header3 = |label3 = 暗号化処理の並列化: |data3 = 不可 |header4 = |label4 = 復号処理の並列化: |data4 = 可 |header5 = |label5 = Random Read: |data5 = 可 |belowstyle = background:#ddf; |below = }} '''CBCモード''' ('''Cipher Block Chaining Mode''') は、1976年に[[IBM]]によって開発された<ref>William F. Ehrsam, Carl H. W. Meyer, John L. Smith, Walter L. Tuchman, "Message verification and transmission error detection by block chaining", US Patent 4074066, 1976</ref>。CBCモードでは、平文の各ブロックは前の暗号文との[[XOR]]を取ってから暗号化される。すなわち、各々の暗号文ブロックはそれ以前のすべての平文ブロックに依存することとなる。メッセージごとのユニーク性を確保するため、最初のブロックの暗号化には[[初期化ベクトル]]が用いられる。 ;暗号化 :<math>C_i = E_K(P_i \oplus C_{i-1}), C_0 = IV</math> ;復号 :<math>P_i = D_K(C_i) \oplus C_{i-1}, C_0 = IV</math> [[File:CBC encryption.svg]] [[File:CBC decryption.svg]] CBCモードは、最も広く用いられている暗号利用モードであり、ECBモードの欠点を補うものである。このモードの主な欠点は、各ブロックの暗号化にその前のブロックの暗号化の結果を使用することから暗号化処理を並列化することができないことと、暗号文ブロックのサイズの整数倍となるようメッセージをパディングする必要があることである。後者の例の一つが、{{仮リンク|Ciphertext stealing|en|Ciphertext stealing}}と呼ばれるものである。CBCモードの暗号化においては、平文あるいは初期化ベクトルが1ビットでも変化すると、それ以降の暗号文すべてが変化することとなる。 不正な初期化ベクトルを用いて復号した場合、復号後の平文の最初のブロックは正しい結果とはならないが、それ以降のブロックは正しく復号される。これは、隣接する2つの暗号文ブロックから平文を回復することが可能なためである。これにより、CBCモードの復号処理は並列化が可能となる。CBCモードの復号においては、暗号文が1ビット変化した場合、その位置に対応するブロック全体および次のブロックにおける対応するビットの復号結果に影響を及ぼすが、それ以外のブロックには影響を及ぼさない。 ==== {{Anchors|PCBC}}Propagating Cipher Block Chaining (PCBC) ==== {{Infobox |name = |bodystyle = |title = |titlestyle = |image = |imagestyle = |caption = |captionstyle = |headerstyle = background:#ccf; |labelstyle = background:#ddf; |datastyle = |header1 = PCBC |label1 = |data1 = |header2 = |label2 = |data2 = Propagating Cipher Block Chaining |header3 = |label3 = 暗号化処理の並列化: |data3 = 不可 |header4 = |label4 = 復号処理の並列化: |data4 = 不可 |header5 = |label5 = Random Read: |data5 = 不可 |belowstyle = background:#ddf; |below = }} '''PCBCモード''' ('''Propagating Cipher Block Chaining Mode'''<ref>http://www.iks-jena.de/mitarb/lutz/security/cryptfaq/q84.html</ref> あるいは '''Plaintext Cipher Block Chaining mode'''<ref>{{cite book |last=Kaufman |first=C. |last2=Perlman |first2=R. |last3=Speciner |first3=M. |year=2002 |title=Network Security |location=Upper Saddle River, NJ |publisher=Prentice Hall |page=319 |edition=2nd |isbn=0130460192 }}</ref>) は、CBCモードの変法である。 ;暗号化 :<math>C_i = E_K(P_i \oplus P_{i-1} \oplus C_{i-1}), P_0 \oplus C_0 = IV</math> ;復号 :<math>P_i = D_K(C_i) \oplus P_{i-1} \oplus C_{i-1}, P_0 \oplus C_0 = IV</math> [[File:PCBC encryption.svg]] [[File:PCBC decryption.svg]] PCBCモードは[[ケルベロス認証]]のバージョン4および{{仮リンク|WASTE|en|WASTE}}において用いられているが、あまり一般的ではない。PCBCモードでは隣接する2つの暗号文ブロックを入れ替えたとしてもそれ以降のブロックの復号に影響しない<ref>{{cite book |last=Kohl |first=J. |chapter=The Use of Encryption in Kerberos for Network Authentication |title=Proceedings, Crypto '89 |year=1990 |publisher=Springer |location=Berlin |isbn=0387973176 |chapterurl=http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/C89/35.PDF |archiveurl=https://web.archive.org/web/20090612060426/http://dsns.csie.nctu.edu.tw/research/crypto/HTML/PDF/C89/35.PDF |archivedate=2009年6月12日 |deadlinkdate=2017年10月 }}</ref>。このため、ケルベロス認証のバージョン5ではPCBCモードは採用されていない。 === {{Anchors|CFB}}Cipher Feedback (CFB) === {{Infobox |name = |bodystyle = |title = |titlestyle = |image = |imagestyle = |caption = |captionstyle = |headerstyle = background:#ccf; |labelstyle = background:#ddf; |datastyle = |header1 = CFB |label1 = |data1 = |header2 = |label2 = |data2 = Cipher Feedback |header3 = |label3 = 暗号化処理の並列化: |data3 = 不可 |header4 = |label4 = 復号処理の並列化: |data4 = 可 |header5 = |label5 = Random Read: |data5 = 可 |belowstyle = background:#ddf; |below = }} '''CFBモード''' ('''Cipher Feedback Mode''') は、CBCモードと類似しており、ブロック暗号を自己同期型の[[ストリーム暗号]]として扱うものである。CFBモードの操作はCBCモードとよく似ており、特に復号処理はCBCモードでの復号処理をほぼそのまま逆転させたものとなる。 ;暗号化 :<math>C_i = E_K (C_{i-1}) \oplus P_i, C_0 = IV</math> ;復号 :<math>P_i = E_K (C_{i-1}) \oplus C_i, C_0 = IV</math> [[File:CFB encryption.svg]] [[File:CFB decryption.svg]] 上に示したもっとも単純なCFBモードでは、CBCモードのような自己同期型とはなっていない。1バイト、1ビットでも欠けた場合にはそれ以降の復号は不可能となる。そのような欠落の後も同期を続けるためには、1バイト、1ビットを同時に暗号化する必要がある。ブロック暗号の入力に[[シフトレジスタ]]を組み合わせることで、CFBモードは自己同期型で利用することが可能となる。 CFBモードを任意のxの整数倍の欠落に対しても同期を維持することが可能な自己同期型のストリーム暗号として利用するためには、ブロックサイズと初期化ベクトルのサイズでシフトレジスタを初期化する必要がある。これはブロック暗号によって暗号化され、暗号化結果の上位xビットは平文のxビットとのXORを取られ、これがxビットの暗号文となる。これらxビットの出力はシフトレジスタにシフトされ、次のxビットの平文の処理に用いられる。復号も同様であり、初期化ベクトルから始まり、復号、復号結果の上位xビットと暗号文のxビットのXORによりxビットの平文となり、これが次のxビットの暗号文の処理に用いられる。このような処理はCFB-8あるいはCFB-1として知られている(シフト量の大きさによる)<ref name="AESBlockDocumentation">[http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf NIST: Recommendation for Block Cipher Modes of Operation]</ref>。 まとめると次のようになる。ここで、S<sub>i</sub> は i 番目のシフトレジスタの状態、a << x は ''x'' ビットだけシフトした ''a''、head(a, x) は a の上位 x ビット、n は初期化ベクトルのビット数である。 ;暗号化 :<math>C_i = \mbox{head}(E_K (S_{i-1}), x) \oplus P_i</math> ;復号 :<math>P_i = \mbox{head}(E_K (S_{i-1}), x) \oplus C_i</math> ;凡例 :<math>S_i = \ ((S_{i-1} << x) + C_i) \mbox{ mod } 2^n</math> :<math>S_{0} = \ \mbox{IV}</math> 暗号文からxビットが失われた場合、シフトレジスタによって再度同期されるまでは復号結果は正しいものとはならない。すなわち、平文の欠落は最大でも1ブロック分に留まることとなる。 CBCモードと同様に、平文における1ビットの変化であっても暗号文全体に及ぶため、暗号化処理の並列化は不可能である。同様に、復号処理の並列化は可能である。 CFBモードは、OFBモードやCTRモードと同様、CBCモードと比較して2つの利点を有している。ブロック暗号を暗号化処理にのみ用いることと、ブロックサイズの整数倍にメッセージのパディングを行う必要がないことである。 === {{Anchors|OFB}}Output Feedback (OFB) === {{Infobox |name = |bodystyle = |title = |titlestyle = |image = |imagestyle = |caption = |captionstyle = |headerstyle = background:#ccf; |labelstyle = background:#ddf; |datastyle = |header1 = OFB |label1 = |data1 = |header2 = |label2 = |data2 = Output Feedback |header3 = |label3 = 暗号化処理の並列化: |data3 = 不可 |header4 = |label4 = 復号処理の並列化: |data4 = 不可 |header5 = |label5 = Random Read: |data5 = 不可 |belowstyle = background:#ddf; |below = }} '''OFBモード''' ('''Output Feedback Mode''') は、ブロック暗号を同期型の[[ストリーム暗号]]として扱うものである。OFBモードでは、{{仮リンク|鍵ストリーム|en|Keystream}}を生成し、これと平文ブロックのXORを取ることで暗号文を得る。他のストリーム暗号と同様に、暗号文のビットをフリップさせると、平文の対応するビットがフリップする。この性質により、暗号化の前であっても[[前方誤り補正]]を適用することが可能となる。 XOR操作の対称性により、暗号化と復号は全く同じ操作となる。 ;暗号化 :<math>C_j = P_j \oplus O_j</math> ;復号 :<math>P_j = C_j \oplus O_j</math> ;凡例 :<math>O_j = \ E_K (I_{j})</math> :<math>I_j =\ O_{j-1}</math> :<math>I_{0}= \ \mbox{IV}</math> [[File:OFB encryption.svg]] [[File:OFB decryption.svg]] 各々の操作はそれ以前のすべての操作に依存していることから、暗号化、復号ともに処理の並列化は不可能である。しかし、平文あるいは暗号文は各操作の最後のXORにのみ用いられることから、ブロック暗号による操作を先行して処理しておき、XORのみを最後に連続して行うことは可能である。 入力として0が連続する文字列を定数としてCBCモードを使用することでOFBモードの鍵ストリームを生成することができる。これは、CBCモード向けの高速なハードウェア実装をOFBモードに流用することが可能であることを意味する。 CFBモードのようにブロックの一部をフィードバックに用いた場合、OFBモードにおける平均サイクル長は<math>2^{32}</math>あるいはそれ以上小さくなる。Davies、Parkinによる数学モデルと、実験による検証から、完全なフィードバックの場合にのみサイクル長は最大となることが明らかとなった。このため、OFBモードの仕様からフィードバックの切り詰めのサポートは除去されている<ref>{{cite book |first=D. W. |last=Davies |first2=G. I. P. |last2=Parkin |chapter=The average cycle size of the key stream in output feedback encipherment |title=Advances in Cryptology, Proceedings of CRYPTO 82 |pages=263–282 |year=1983 |location=New York |publisher=Plenum Press |isbn=0306413663 }}</ref><ref>http://www.crypto.rub.de/its_seminar_ws0809.html{{リンク切れ|date=2017年10月 |bot=InternetArchiveBot }}</ref>。 === {{Anchors|CTR}}Counter (CTR) === {{Infobox |name = |bodystyle = |title = |titlestyle = |image = |imagestyle = |caption = |captionstyle = |headerstyle = background:#ccf; |labelstyle = background:#ddf; |datastyle = |header1 = CTR |label1 = |data1 = |header2 = |label2 = |data2 = Counter |header3 = |label3 = 暗号化処理の並列化: |data3 = 可 |header4 = |label4 = 復号処理の並列化: |data4 = 可 |header5 = |label5 = Random Read: |data5 = 可 |belowstyle = background:#ddf; |below = }} '''CTRモード''' ('''Counter Mode''') は、ブロック暗号を同期型の[[ストリーム暗号]]として扱うものである。'''integer counter mode''' ('''ICM''') あるいは '''segmented integer counter mode''' ('''SIC''') とも呼ばれる。 「カウンター」と呼ばれる値を暗号化することで鍵ストリームブロックを生成する。カウンターとしては、単調増加であり値が重複することがなければどのような関数でも用いることができるが、1ずつ増加するものがもっとも単純でありもっとも一般的である。単純かつ決定論的な関数をカウンターとして用いることには異論があり、批評家は「暗号システムを系統だった入力に晒すことは、不必要なリスクを招くものである」と主張していた<ref>{{cite book |first=Robert R. |last=Jueneman |chapter=Analysis of certain aspects of output feedback mode |title=Advances in Cryptology, Proceedings of CRYPTO 82 |pages=99–127 |year=1983 |location=New York |publisher=Plenum Press |isbn=0306413663 }}</ref>。現在では、CTRモードは広く受け入れられており、入力関数に由来する問題はCTRモードではなく基礎となるブロック暗号によるものと認識されている<ref>Helger Lipmaa, Phillip Rogaway, and David Wagner. Comments to NIST concerning AES modes of operation: CTR-mode encryption. 2000</ref>。CTRモードはNiels Fergusonおよび[[ブルース・シュナイアー|Bruce Schneier]]によって推薦される2つの暗号利用モードのうちの1つとなっている(もう1つはCBCモード)<ref>Niels Ferguson, Bruce Schneier, Tadayoshi Kohno, Cryptography Engineering, page 71, 2010</ref>。 CTRモードはOFBモードに似た性質を示すが、復号におけるランダムアクセス性を有している。CTRモードは暗号化、復号のいずれも並列処理が可能であり、マルチプロセッサ環境に適している。また、OFBモードのような短いサイクルの問題も存在しない<ref>http://www.quadibloc.com/crypto/co040601.htm</ref>。 下記のダイアグラムにおける[[ノンス|Nonce]]は、他の暗号利用モードにおける初期化ベクトルに相当する。Nonceとカウンターを無損失操作(連結、add、XOR)によって組み合わせることで、実際に用いられるカウンターブロックが生成される。 [[File:CTR encryption 2.svg]] [[File:CTR decryption 2.svg]] === その他 === * '''CTS''' ({{仮リンク|Ciphertext stealing|en|Ciphertext stealing}}) * '''2DEM''' (2D Encryption Mode) * '''ABC''' (Accumulated Block Chaining) * '''IGE''' (Infinite Garble Extension) * '''F8@3GPP''' <math>B=E_K(\mathrm{nonce})</math>, <math>C_i=A_i\oplus M_i</math>, <math>A_i=E_K(A_{i-1}+i+B)</math> など == 認証用の利用モード == {{main|認証付き暗号}} 認証用の利用モードとして次のものなどが知られている。 * '''[[Counter with CBC-MAC|CCM]]''' (Counter with CBC-MAC) * '''[[Galois/Counter Mode|GCM]]''' (Galois/Counter Mode) * '''OCB''' (Offset CodeBook) * '''XCBC''' (eXtended Ciphertext Block Chaining) ** '''XCBC-MAC''' == 規格 == *FIPS PUB-81 DES MODES OF OPERATION, 1980 December 2. *ANSI X3.106 Digital encryption Algorithm - Modes of Operation *ISO 8372:1987 Information processing -- Modes of operation for a 64-bit block cipher algorithm *ISO/IEC 10116 Information technology -- Security techniques -- Modes of operation for an n-bit block cipher *JIS X 5052:1990 64ビットのブロック暗号アルゴリズムの利用モード (Modes of operation for a 64-bit block cipher algorithm) *JIS X 5053:1998 セキュリティ技術 ― nビットブロック暗号の利用モード (Information technology -- Security techniques -- Modes of operation for an n-bit block cipher) *{{IETF RFC|3610}} -- Counter with CBC-MAC (CCM) == 脚注 == {{Reflist}} ==関連項目== * [[ブロック暗号]] * [[共通鍵暗号]] * [[暗号理論]] * [[認証付き暗号]] {{cryptography navbox|block|stream|hash}} {{DEFAULTSORT:あんこうりようもおと}} [[Category:暗号利用モード|*]] [[Category:暗号アルゴリズム]]
このページで使用されているテンプレート:
テンプレート:Anchors
(
ソースを閲覧
)
テンプレート:Cite book
(
ソースを閲覧
)
テンプレート:Cryptography navbox
(
ソースを閲覧
)
テンプレート:IETF RFC
(
ソースを閲覧
)
テンプレート:Infobox
(
ソースを閲覧
)
テンプレート:Main
(
ソースを閲覧
)
テンプレート:Multiple image
(
ソースを閲覧
)
テンプレート:Redirect
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:リンク切れ
(
ソースを閲覧
)
テンプレート:仮リンク
(
ソースを閲覧
)
暗号利用モード
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報