目次

NIST FIPS 197 日本語訳

英語タイトル : Advanced Encryption Standard (AES)
日本語タイトル : 高度暗号化標準(AES)
公開日 : 2023-05-09
原文URL : https://csrc.nist.gov/pubs/fips/197/final
翻訳編集 : 自動生成(有志による非公式の日本語訳), 原文取得日 : 2026-10-25, 訳文 : 465 / 471 ブロック

[要約] FIPS 197 は、Rijndaelブロック暗号ファミリのうちAES-128、AES-192、AES-256を規定する高度暗号化標準(AES)です。いずれも128ビットのブロック単位でデータを変換し、数字の接尾辞は鍵のビット長を示します。表記法と数学的準備に続き、CIPHER()、KEYEXPANSION()、INVCIPHER()を定めます。2000年のAES競技会の勝者としてRijndaelが選定された経緯を背景に、鍵長の要件や実装上の提案、暗号利用モードにも触れます。

FIPS 197

FIPS 197

Federal Information Processing Standards Publication

連邦情報処理標準出版物

Advanced Encryption Standard (AES)

高度暗号化標準(AES)

Category: Computer Security

分類:コンピュータセキュリティ

Subcategory: Cryptography

小分類:暗号

Information Technology Laboratory National Institute of Standards and Technology Gaithersburg, MD 20899-8900

情報技術ラボラトリ 米国国立標準技術研究所 Gaithersburg, MD 20899-8900

This publication is available free of charge from: https://doi.org/10.6028/NIST.FIPS.197-upd1

本出版物は次から無償で入手できる:https://doi.org/10.6028/NIST.FIPS.197-upd1

Published November 26, 2001; Updated May 9, 2023

2001年11月26日発行、2023年5月9日更新

U.S. Department of Commerce Donald L. Evans, Secretary

米国商務省 長官 Donald L. Evans

Technology Administration Phillip J. Bond, Under Secretary for Technology

技術局 技術担当次官 Phillip J. Bond

National Institute of Standards and Technology Karen H. Brown, Acting Director

米国国立標準技術研究所 所長代行 Karen H. Brown

Foreword

まえがき

The Federal Information Processing Standards Publication Series of the National Institute of Standards and Technology is the official series of publications relating to standards and guidelines developed under 15 U.S.C. 278g-3, and issued by the Secretary of Commerce under 40 U.S.C. 11331.

米国国立標準技術研究所の連邦情報処理標準出版物シリーズは、15 U.S.C. 278g-3に基づいて策定され、40 U.S.C. 11331に基づいて商務長官が発行する標準およびガイドラインに関する公式の出版物シリーズです。

Comments concerning this Federal Information Processing Standard publication are welcomed and should be submitted using the contact information in the “Inquiries and comments” clause of the announcement section.

本連邦情報処理標準出版物に関するコメントを歓迎します。コメントは、公告部分の「Inquiries and comments(問い合わせおよびコメント)」条項に記載された連絡先を用いて提出することが望まれます。

James A. St. Pierre, Acting Director Information Technology Laboratory

情報技術ラボラトリ 所長代行 James A. St. Pierre

Abstract

概要

In 2000, NIST announced the selection of the Rijndael block cipher family as the winner of the Advanced Encryption Standard (AES) competition. Block ciphers are the foundation for many cryptographic services, especially those that provide assurance of the confidentiality of data.

2000年、NISTは、Advanced Encryption Standard (AES) 競技会の勝者としてRijndaelブロック暗号ファミリを選定したことを発表しました。ブロック暗号は多くの暗号サービスの基盤であり、特にデータの機密性を保証するサービスの基盤となっています。

Three members of the Rijndael family are specified in this Standard: AES-128, AES-192, and AES-256. Each of them transforms data in blocks of 128 bits, and the numerical suffix indicates the bit length of the associated cryptographic keys.

本標準では、Rijndaelファミリのうち3つのメンバー、すなわちAES-128、AES-192、AES-256を規定します。いずれも128ビットのブロック単位でデータを変換し、数字の接尾辞は対応する暗号鍵のビット長を示します。

Keywords:

キーワード:

AES; block cipher; confidentiality; cryptography; encryption; Rijndael.

AES、ブロック暗号、機密性、暗号、暗号化、Rijndael。

Federal Information

連邦情報

Processing Standards Publication 197

処理標準出版物 197

Published: November 26, 2001

発行:2001年11月26日

Updated: May 9, 2023

更新:2023年5月9日

Announcing the ADVANCED ENCRYPTION STANDARD (AES)

ADVANCED ENCRYPTION STANDARD (AES) の公告

Federal Information Processing Standards Publications (FIPS) are developed by NIST under 15 U.S.C. 278g-3 and issued by the Secretary of Commerce under 40 U.S.C. 11331.

連邦情報処理標準出版物(FIPS)は、15 U.S.C. 278g-3に基づいてNISTが策定し、40 U.S.C. 11331に基づいて商務長官が発行します。

1.Name of Standard. Advanced Encryption Standard (AES) (FIPS 197).

1.標準の名称。Advanced Encryption Standard (AES) (FIPS 197)。

2.Category of Standard. Computer Security Standard, Cryptography.

2.標準の分類。コンピュータセキュリティ標準、暗号。

3.Explanation. The Advanced Encryption Standard (AES) specifies a FIPS-approved cryptographic algorithm that can be used to protect electronic data. The AES algorithm is a symmetric block cipher that can encrypt (encipher) and decrypt (decipher) digital information.

3.説明。Advanced Encryption Standard (AES) は、電子データの保護に使用できるFIPS承認の暗号アルゴリズムを規定します。AESアルゴリズムは対称ブロック暗号であり、デジタル情報を暗号化(encipher)および復号(decipher)できます。

The AES algorithm is capable of using cryptographic keys of 128, 192, and 256 bits to encrypt and decrypt data in blocks of 128 bits.

AESアルゴリズムは、128ビット、192ビット、256ビットの暗号鍵を用いて、128ビットのブロック単位でデータを暗号化および復号できます。

4.Approving Authority. Secretary of Commerce.

4.承認機関。商務長官。

5.Maintenance Agency. Department of Commerce, National Institute of Standards and Technology, Information Technology Laboratory (ITL).

5.維持管理機関。商務省 米国国立標準技術研究所 情報技術ラボラトリ(ITL)。

6.Applicability. Federal Information Processing Standards apply to information systems used or operated by federal agencies, a contractor of an agency, or other organization on behalf of an agency. They do not apply to national security systems as defined in 44 U.S.C. 3552.

6.適用範囲。連邦情報処理標準は、連邦政府機関、政府機関の請負業者、または政府機関に代わるその他の組織が使用または運用する情報システムに適用されます。44 U.S.C. 3552に定義される国家安全保障システムには適用されません。

This Standard may be used by federal agencies to protect information when they have determined that encryption is appropriate, in accordance with applicable Office of Management and Budget and agency policies. Federal agencies may also use alternative methods that NIST has indicated are appropriate for this purpose.

連邦政府機関は、適用される行政管理予算局(Office of Management and Budget)および各機関の方針に従い、暗号化が適切であると判断した場合に、情報を保護するために本標準を使用してもよいです。連邦政府機関は、この目的に適切であるとNISTが示した代替手段を使用してもよいです。

This Standard may be adopted and used by non-Federal Government organizations.

本標準は、連邦政府以外の組織が採用し使用してもよいです。

7.Specifications. Federal Information Processing Standard (FIPS) 197, Advanced Encryption Standard (AES) (affixed).

7.仕様。Federal Information Processing Standard (FIPS) 197, Advanced Encryption Standard (AES)(添付)。

8.Implementations. The algorithm specified in this Standard may be implemented in software, firmware, hardware, or any combination thereof. The specific implementation may depend on several factors, such as the application, the environment, the technology used, etc. The algorithm shall be used in conjunction with a FIPS-approved or NIST-recommended mode of operation. Object Identifiers (OIDs) and any associated parameters for AES used in these modes are available at the Computer Security Objects Register (CSOR), located at https://csrc.nist.gov/projects/csor.

8.実装。本標準で規定するアルゴリズムは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せで実装してもよいです。具体的な実装は、アプリケーション、環境、使用する技術など、いくつかの要因に依存し得ます。本アルゴリズムは、FIPS承認またはNIST推奨の利用モードと組み合わせて使用しなければなりません。これらのモードで使用するAESのオブジェクト識別子(OID)および関連パラメータは、https://csrc.nist.gov/projects/csor にあるComputer Security Objects Register(CSOR)で入手できます。

NIST has developed a validation program to test implementations for conformance to the algorithms in this Standard. Information about the validation program is available at https: //nist.gov/cmvp. Examples for each key size are available at https://csrc.nist.gov/projects/aes.

NISTは、本標準のアルゴリズムへの適合性について実装を試験する検証プログラムを策定しています。検証プログラムに関する情報は https: //nist.gov/cmvp で入手できます。各鍵長の例は https://csrc.nist.gov/projects/aes で入手できます。

9.Implementation Schedule. This Standard became effective on May 26, 2002.

9.実施スケジュール。本標準は2002年5月26日に発効しました。

10.Patents. Implementations of the algorithm specified in this Standard may be covered by U.S. and foreign patents.

10.特許。本標準で規定するアルゴリズムの実装は、米国および外国の特許の対象となる場合があります。

11.Export Control. Certain cryptographic devices and technical data regarding them are subject to federal export controls. Exports of cryptographic modules implementing this Standard and technical data regarding them must comply with all federal laws and regulations and must be licensed by the Bureau of Industry and Security of the U.S. Department of Commerce. Information about export regulations is available at https://www.bis.doc.gov.

11.輸出管理。特定の暗号デバイスおよびそれに関する技術データは、連邦の輸出管理の対象となります。本標準を実装する暗号モジュールおよびそれに関する技術データの輸出は、すべての連邦法および規則に従わなければならず、米国商務省産業安全保障局(Bureau of Industry and Security)の許可を受けなければなりません。輸出規制に関する情報は https://www.bis.doc.gov で入手できます。

12.Qualifications. NIST will continue to follow developments in the analysis of the AES algorithm. As with its other cryptographic algorithm standards, NIST will formally reevaluate this Standard every five years.

12.留意事項。NISTは、AESアルゴリズムの分析の進展を引き続き注視します。NISTは、他の暗号アルゴリズム標準と同様に、本標準を5年ごとに正式に再評価します。

Both this Standard and possible threats reducing the security provided through the use of this Standard will undergo review by NIST as appropriate, taking into account newly available analysis and technology. In addition, the awareness of any breakthrough in technology or any mathematical weakness of the algorithm will cause NIST to reevaluate this Standard and provide necessary revisions.

本標準、および本標準の使用によって得られるセキュリティを低下させ得る脅威の双方について、新たに得られた分析と技術を考慮して、NISTが適宜レビューを行います。さらに、技術上の飛躍的進歩やアルゴリズムの数学的な弱点が認識された場合、NISTは本標準を再評価し、必要な改訂を行います。

13.Where to Obtain Copies. This publication is available by accessing https://csrc.nist.gov/ publications. Other computer security publications are available at the same website.

13.入手先。本出版物は https://csrc.nist.gov/ publications にアクセスして入手できます。その他のコンピュータセキュリティ出版物も同じWebサイトで入手できます。

14.Inquiries and Comments. Inquiries and comments about this FIPS may be submitted to fips-197-comments@nist.gov.

14.問い合わせおよびコメント。本FIPSに関する問い合わせおよびコメントは fips-197-comments@nist.gov に提出してもよいです。

15.How to Cite This Publication. NIST has assigned NIST FIPS 197-upd1 as the publication identifier for this FIPS, per the NIST Technical Series Publication Identifier Syntax. NIST recommends that it be cited as follows:

15.本出版物の引用方法。NISTは、NIST Technical Series Publication Identifier Syntaxに従い、本FIPSの出版物識別子としてNIST FIPS 197-upd1を割り当てています。NISTは、次のように引用することを推奨する:

National Institute of Standards and Technology (2001) Advanced Encryption Standard (AES). (Department of Commerce, Washington, D.C.), Federal Information Processing Standards Publication (FIPS) NIST FIPS 197-upd1, updated May 9, 2023. https://doi.org/10.6028/NIST.FIPS.197-upd1

National Institute of Standards and Technology (2001) Advanced Encryption Standard (AES). (Department of Commerce, Washington, D.C.), Federal Information Processing Standards Publication (FIPS) NIST FIPS 197-upd1, updated May 9, 2023. https://doi.org/10.6028/NIST.FIPS.197-upd1

Federal Information Processing Standards Publication 197

連邦情報処理標準出版物 197

Specification for the ADVANCED ENCRYPTION STANDARD (AES)

ADVANCED ENCRYPTION STANDARD (AES) の仕様

Table of Contents

目次

List of Tables

表一覧

List of Figures

図一覧

List of Algorithms

アルゴリズム一覧

1. Introduction

1. はじめに

A block is a sequence of bits of a given fixed length. A block cipher is a family of permutations of blocks that is parameterized by a sequence of bits called the key.

ブロックとは、所定の固定長をもつビット列です。ブロック暗号とは、鍵と呼ばれるビット列によってパラメータ化された、ブロックの置換の族です。

In 1997, NIST initiated the Advanced Encryption Standard (AES) development effort [1] and called for the public to submit candidate algorithms for block ciphers. Block ciphers are the foundation for many cryptographic services, especially those that provide assurance of the confidentiality of data. In 2000, NIST announced the selection of Rijndael [2, 3] for the AES.

1997年、NISTはAdvanced Encryption Standard (AES) の策定作業 [1] を開始し、ブロック暗号の候補アルゴリズムを公募しました。ブロック暗号は多くの暗号サービスの基盤であり、特にデータの機密性を保証するサービスの基盤となっています。2000年、NISTはAESとしてRijndael [2, 3] を選定したことを発表しました。

This Standard specifies three instantiations of Rijndael: AES-128, AES-192, and AES-256, where the suffix indicates the bit length of the key. The block size (i.e., the length of the data inputs and outputs) is 128 bits in each case. Rijndael supports additional block sizes and key lengths that are not adopted in this Standard.

本標準は、Rijndaelの3つのインスタンス、すなわちAES-128、AES-192、AES-256を規定します。接尾辞は鍵のビット長を示します。ブロックサイズ(すなわち、データの入力および出力の長さ)はいずれの場合も128ビットです。Rijndaelは、本標準では採用していない追加のブロックサイズおよび鍵長もサポートします。

This Standard is organized as follows:

本標準の構成は次のとおりです。

•Section 2 defines the terms, acronyms, algorithm parameters, symbols, and functions in this Standard.

•第2節では、本標準における用語、略語、アルゴリズムのパラメータ、記号、および関数を定義します。

•Section 3 describes the notation and conventions for the ordering and indexing of bits, bytes, and words.

•第3節では、ビット、バイト、ワードの順序付けおよびインデックス付けに関する表記法と規約を説明します。

•Section 4 explains some mathematical components of the AES specifications: finite field arithmetic and multiplication by a fixed matrix of finite field elements.

•第4節では、AES仕様の数学的構成要素、すなわち有限体の演算と、有限体の元からなる固定行列による乗算について説明します。

•Section 5 specifies AES-128, AES-192, and AES-256.

•第5節では、AES-128、AES-192、AES-256を規定します。

•Section 6 provides implementation guidelines on key length requirements, keying restrictions, parameter extensions, and implementation suggestions regarding various platforms.

•第6節では、鍵長の要件、鍵の設定に関する制限、パラメータの拡張、および各種プラットフォームに関する実装上の提案について、実装のガイドラインを示します。

•Appendix A gives examples of the key expansion routines for AES-128, AES-192, and AES-256.

•付録Aでは、AES-128、AES-192、AES-256の鍵拡張ルーチンの例を示します。

•Appendix B gives a step-by-step example of an invocation of AES-128.

•付録Bでは、AES-128の呼び出しを段階的に示した例を示します。

•Appendix C gives a reference to the NIST website for extensive example vectors for AES-128, AES-192, and AES-256.

•付録Cでは、AES-128、AES-192、AES-256の多数の例示ベクトルを掲載したNISTのWebサイトへの参照を示します。

•Appendix D summarizes the updates to the original version of this publication.

•付録Dでは、本出版物の初版からの更新内容をまとめます。

2. Definitions

2. 定義

2.1 Terms and Acronyms

2.1 用語および略語

The following definitions are used in this Standard:

本標準では次の定義を用います。

AES — Advanced Encryption Standard.

AES — Advanced Encryption Standard。

Affine transformation — A transformation consisting of multiplication by a matrix, followed by the addition of a vector.

アフィン変換 — 行列による乗算と、それに続くベクトルの加算からなる変換。

Array — A fixed-size data structure that stores a collection of elements, where each element is identified by its integer index or indices.

配列 — 要素の集まりを格納する固定サイズのデータ構造であり、各要素は1つまたは複数の整数インデックスによって識別されます。

Bit — A binary digit: 0 or 1.

ビット — 2進数字、すなわち0または1。

Block — A sequence of bits of a given fixed length. In this Standard, blocks consist of 128 bits, sometimes represented as arrays of bytes or words.

ブロック — 所定の固定長をもつビット列。本標準では、ブロックは128ビットからなり、バイトまたはワードの配列として表されることもあります。

Block cipher — A family of permutations of blocks that is parameterized by the key.

ブロック暗号 — 鍵によってパラメータ化された、ブロックの置換の族。

Byte — A sequence of eight bits.

バイト — 8ビットの列。

Equivalent inverse cipher — An alternative specification of the inverse of CIPHER() with a structure similar to that of CIPHER() and with a modified key schedule as input.

等価逆暗号 — CIPHER() の逆変換の代替仕様であり、CIPHER() と類似した構造をもち、変更された鍵スケジュールを入力とします。

Key — The parameter of a block cipher that determines the selection of a permutation from the block cipher family.

鍵 — ブロック暗号のパラメータであり、ブロック暗号の族からどの置換を選択するかを決定します。

Key schedule — The sequence of round keys that are generated from the key by KEYEXPANSION().

鍵スケジュール — KEYEXPANSION() によって鍵から生成されるラウンド鍵の列。

Rijndael — The block cipher that NIST selected as the winner of the AES competition.

Rijndael — NISTがAES競技会の勝者として選定したブロック暗号。

Round — A sequence of transformations of the state that is iterated Nr times in the specifications of CIPHER(), INVCIPHER(), and EQINVCIPHER(). The sequence consists of four transformations, except for one iteration, in which one of the transformations is omitted.

ラウンド — CIPHER()、INVCIPHER()、EQINVCIPHER() の仕様においてNr回反復される、ステートの変換の列。この列は4つの変換からなりますが、1回の反復においてのみ、変換の1つが省略されます。

Round key — One of the \(Nr + 1\) arrays of four words that are derived from the block cipher key using the key expansion routine; each round key is an input to an instance of ADDROUNDKEY() in the AES block cipher.

ラウンド鍵 — 鍵拡張ルーチンを用いてブロック暗号の鍵から導出される、4ワードからなる \(Nr + 1\) 個の配列の1つ。各ラウンド鍵は、AESブロック暗号におけるADDROUNDKEY() の各インスタンスへの入力となります。

State — Intermediate result of the AES block cipher that is represented as a two-dimensional array of bytes with four rows and Nb columns.

ステート — AESブロック暗号の中間結果であり、4行Nb列のバイトの2次元配列として表されます。

S-box — A non-linear substitution table used in SUBBYTES() and KEYEXPANSION() to perform a one-to-one substitution of a byte value.

Sボックス — SUBBYTES() およびKEYEXPANSION() で使用される非線形の置換表であり、バイト値の1対1の置換を行います。

Word — A group of 32 bits that is treated either as a single entity or as an array of 4 bytes.

ワード — 32ビットのまとまりであり、単一の実体として、または4バイトの配列として扱われます。

2.2 List of Functions

2.2 関数一覧

The following functions are specified in this Standard:

本標準では次の関数を規定します。

ADDROUNDKEY() — The transformation of the state in which a round key is combined with the state.

ADDROUNDKEY() — ラウンド鍵をステートと結合するステートの変換。

AES-128() — The block cipher specified in this Standard with 128-bit keys.

AES-128() — 本標準で規定する、128ビット鍵を用いるブロック暗号。

AES-192() — The block cipher specified in this Standard with 192-bit keys.

AES-192() — 本標準で規定する、192ビット鍵を用いるブロック暗号。

AES-256() — The block cipher specified in this Standard with 256-bit keys.

AES-256() — 本標準で規定する、256ビット鍵を用いるブロック暗号。

CIPHER() — The transformation of blocks that underlies AES-128, AES-192, and AES-256; the key schedule and the number of rounds are parameters of the transformation.

CIPHER() — AES-128、AES-192、AES-256の基礎となるブロックの変換。鍵スケジュールとラウンド数はこの変換のパラメータです。

EQINVCIPHER() — The inverse of CIPHER() in which \(dw\) replaces \(w\) as the key schedule parameter.

EQINVCIPHER() — 鍵スケジュールのパラメータとして \(w\) の代わりに \(dw\) を用いる、CIPHER() の逆変換。

INVCIPHER() — The inverse of CIPHER().

INVCIPHER() — CIPHER() の逆変換。

INVMIXCOLUMNS() — The inverse of MIXCOLUMNS().

INVMIXCOLUMNS() — MIXCOLUMNS() の逆変換。

INVSBOX() — The inverse of SBOX().

INVSBOX() — SBOX() の逆変換。

INVSHIFTROWS() — The inverse of SHIFTROWS().

INVSHIFTROWS() — SHIFTROWS() の逆変換。

INVSUBBYTES() — The inverse of SUBBYTES().

INVSUBBYTES() — SUBBYTES() の逆変換。

KEYEXPANSION() — The routine that generates the round keys from the key.

KEYEXPANSION() — 鍵からラウンド鍵を生成するルーチン。

KEYEXPANSIONEIC() — The routine that generates the modified round keys for the equivalent inverse cipher.

KEYEXPANSIONEIC() — 等価逆暗号のための変更されたラウンド鍵を生成するルーチン。

MIXCOLUMNS() — The transformation of the state that takes all of the columns of the state and mixes their data (independently of one another) to produce new columns.

MIXCOLUMNS() — ステートのすべての列を取り、各列のデータを(互いに独立に)混合して新しい列を生成するステートの変換。

ROTWORD() — The transformation of words in which the four bytes of the word are permuted cyclically.

ROTWORD() — ワードの4バイトを巡回的に置換するワードの変換。

SBOX() — The transformation of bytes defined by the S-box.

SBOX() — Sボックスによって定義されるバイトの変換。

SHIFTROWS() — The transformation of the state in which the last three rows are cyclically shifted by different offsets.

SHIFTROWS() — 最後の3行をそれぞれ異なるオフセットで巡回シフトするステートの変換。

SUBBYTES() — The transformation of the state that applies the S-box independently to each byte of the state.

SUBBYTES() — ステートの各バイトに独立にSボックスを適用するステートの変換。

SUBWORD() — The transformation of words in which the S-box is applied to each of the four bytes of the word.

SUBWORD() — ワードの4バイトそれぞれにSボックスを適用するワードの変換。

XTIMES() — The transformation of bytes in which the polynomial representation of the input byte is multiplied by \(x\), modulo \(m(x)\), to produce the polynomial representation of the output byte.

XTIMES() — 入力バイトの多項式表現に \(m(x)\) を法として \(x\) を乗じ、出力バイトの多項式表現を生成するバイトの変換。

2.3 Algorithm Parameters and Symbols

2.3 アルゴリズムのパラメータおよび記号

\(b^{-1}\) — The multiplicative inverse of the element \(b\) in \(\mathrm{GF}(2^8)\).

\(b^{-1}\) — \(\mathrm{GF}(2^8)\) における元 \(b\) の乗法逆元。

\(\tilde{b}\) — The input to the affine transformation in the AES S-box.

\(\tilde{b}\) — AESのSボックスにおけるアフィン変換への入力。

\(dw\) — Word array for the key schedule that is input to the equivalent inverse cipher.

\(dw\) — 等価逆暗号に入力される鍵スケジュールのワード配列。

GF(2) — Finite field with two elements.

GF(2) — 2個の元からなる有限体。

\(\mathrm{GF}(2^8)\) — Finite field with 256 elements.

\(\mathrm{GF}(2^8)\) — 256個の元からなる有限体。

\(in\) — The data input to CIPHER() or INVCIPHER(), represented as an array of 16 bytes indexed from 0 to 15.

\(in\) — CIPHER() またはINVCIPHER() へのデータ入力。0から15までのインデックスが付いた16バイトの配列として表されます。

\(m(x)\) — The modulus specified in this standard for the polynomial representation of bytes as elements of \(\mathrm{GF}(2^8)\).

\(m(x)\) — バイトを \(\mathrm{GF}(2^8)\) の元として多項式表現する際の、本標準で規定する法。

\(key\) — The array of \(Nk\) words that comprise the key for AES-128, AES-192, or AES-256.

\(key\) — AES-128、AES-192、またはAES-256の鍵を構成する \(Nk\) 個のワードの配列。

\(Nb\) — The number of columns comprising the state, where each column is a 32-bit word. For this Standard, \(Nb = 4\).

\(Nb\) — ステートを構成する列の数。各列は32ビットのワードです。本標準では \(Nb = 4\) です。

\(Nk\) — The number of 32-bit words comprising the key. \(Nk\) is assigned to 4, 6, and 8 for AES-128, AES-192, and AES-256, respectively. (see Section 6.3).

\(Nk\) — 鍵を構成する32ビットワードの数。\(Nk\) には、AES-128、AES-192、AES-256に対してそれぞれ4、6、8が割り当てられます(6.3節を参照してください)。

\(Nr\) — The number of rounds. \(Nr\) is assigned to 10, 12, and 14 for AES-128, AES-192, and AES-256, respectively.

\(Nr\) — ラウンド数。\(Nr\) には、AES-128、AES-192、AES-256に対してそれぞれ10、12、14が割り当てられます。

\(out\) — The data output of CIPHER() or INVCIPHER(), represented as an array of 16 bytes indexed from 0 to 15.

\(out\) — CIPHER() またはINVCIPHER() のデータ出力。0から15までのインデックスが付いた16バイトの配列として表されます。

\(Rcon\) — Word array for the round constant.

\(Rcon\) — ラウンド定数のワード配列。

\(state\) — The state, represented as a two-dimensional array of 16 bytes, with rows and columns indexed from 0 to 3.

\(state\) — ステート。行と列に0から3までのインデックスが付いた16バイトの2次元配列として表されます。

\(u[i]\) — For a one-dimensional array \(u\) of words or bytes, the element in the array that is indexed by a non-negative integer \(i\).

\(u[i]\) — ワードまたはバイトの1次元配列 \(u\) において、非負整数 \(i\) でインデックス付けされる配列の要素。

\(u[i..i+3]\) — For an array \(u\) of words, the sequence \(u[i], u[i+1], u[i+2], u[i+3]\).

\(u[i..i+3]\) — ワードの配列 \(u\) における列 \(u[i], u[i+1], u[i+2], u[i+3]\)。

\(w\) — Word array for the key schedule.

\(w\) — 鍵スケジュールのワード配列。

\(\oplus\) — Either the exclusive-OR operation on bits, the bitwise exclusive-OR operation on bytes, or the bitwise exclusive-OR operation on words.

\(\oplus\) — ビットに対する排他的論理和演算、バイトに対するビット単位の排他的論理和演算、またはワードに対するビット単位の排他的論理和演算。

\(\bullet\) — Multiplication in \(\mathrm{GF}(2^8)\).

\(\bullet\) — \(\mathrm{GF}(2^8)\) における乗算。

\(*\) — Integer multiplication.

\(*\) — 整数の乗算。

\(\leftarrow\) — Assignment of a variable in pseudocode.

\(\leftarrow\) — 擬似コードにおける変数への代入。

\(\{\}\) — Delimiters for a byte in hexadecimal or binary notation.

\(\{\}\) — 16進表記または2進表記のバイトを囲む区切り記号。

3. Notation and Conventions

3. 表記法と規約

3.1 Inputs and Outputs

3.1 入力と出力

A bit is a binary digit — 0 or 1. A block is a sequence of 128 bits; the data input and output for the AES block ciphers are blocks. Another input to the AES block ciphers, called the key, is a bit sequence that is typically established beforehand and maintained across many invocations of the block cipher. The lengths of the keys for AES-128, AES-192, and AES-256 are 128 bits, 192 bits, and 256 bits, respectively.

ビットは2進数字、すなわち0または1です。ブロックは128ビットの列であり、AESブロック暗号のデータ入力および出力はブロックです。AESブロック暗号のもう一つの入力は鍵と呼ばれ、通常は事前に確立され、ブロック暗号の多数回の呼出しにわたって維持されるビット列です。AES-128、AES-192、AES-256の鍵長は、それぞれ128ビット、192ビット、256ビットです。

3.2 Bytes

3.2 バイト

The basic processing unit in the AES algorithms is the byte — a sequence of eight bits.

AESアルゴリズムにおける基本的な処理単位はバイト、すなわち8ビットの列です。

A byte value is denoted by the concatenation of the eight bits between braces (e.g., {10100011}). When the bits of a byte are denoted by an indexed variable, the convention in this Standard is for the indices to decrease from left to right (i.e., \(\{b_7\, b_6\, b_5\, b_4\, b_3\, b_2\, b_1\, b_0\}\)).

バイト値は、8つのビットを連結して波括弧で囲んで表します(例:{10100011})。バイトのビットを添字付き変数で表す場合、本標準では添字が左から右へ減少する規約をとります(すなわち \(\{b_7\, b_6\, b_5\, b_4\, b_3\, b_2\, b_1\, b_0\}\))。

It is also convenient to denote byte values using hexadecimal notation. The 16 hexadecimal characters represent sequences of four bits, as listed in Table 1. A byte is represented by an ordered pair of hexadecimal characters, where the left character in the pair represents the four left-most bits(i.e., \(b_7, b_6, b_5, b_4\)), and the right character in the pair represents the four right-most bits (i.e., \(b_3, b_2, b_1, b_0\)). For example, the hexadecimal form of the byte {10100011} is {a3}.

バイト値を16進表記で表すことも便利です。16個の16進文字は、表1に示すとおり4ビットの列を表します。バイトは16進文字の順序対で表され、対の左の文字が左端の4ビット(すなわち \(b_7, b_6, b_5, b_4\))を、右の文字が右端の4ビット(すなわち \(b_3, b_2, b_1, b_0\))を表します。たとえば、バイト {10100011} の16進形式は {a3} です。

Table 1. Hexadecimal representation of 4-bit sequences

表1. 4ビット列の16進表現

Sequence00000001001000110100010101100111
Character01234567
Sequence10001001101010111100110111101111
Character89abcdef
ビット列00000001001000110100010101100111
文字01234567
ビット列10001001101010111100110111101111
文字89abcdef

3.3 Indexing of Byte Sequences

3.3 バイト列の添字付け

In order to unambiguously represent the data and key inputs as sequences of bytes, the following indexing convention is adopted in this Standard. Given a sequence of \(8k\) bits,

データ入力および鍵入力をバイト列として曖昧さなく表すために、本標準では次の添字付けの規約を採用します。\(8k\) ビットの列

\[r_0\, r_1\, r_2\, \ldots\, r_{(8k-3)}\, r_{(8k-2)}\, r_{(8k-1)} \tag{3.1}\]
\[r_0\, r_1\, r_2\, \ldots\, r_{(8k-3)}\, r_{(8k-2)}\, r_{(8k-1)} \tag{3.1}\]

(for some positive integer \(k\)), the bytes \(a_j\) for \(0 \le j \le k-1\) are defined as follows:

(\(k\) はある正の整数)が与えられたとき、\(0 \le j \le k-1\) に対するバイト \(a_j\) を次のように定義します。

\[a_j = \{r_{8j}\, r_{(8j+1)}\, \ldots\, r_{(8j+7)}\}. \tag{3.2}\]
\[a_j = \{r_{8j}\, r_{(8j+1)}\, \ldots\, r_{(8j+7)}\}. \tag{3.2}\]
Thus, for example, the data block
したがって、たとえばデータブロック
\[r_0\, r_1\, r_2\, \ldots\, r_{125}\, r_{126}\, r_{127} \tag{3.3}\]
\[r_0\, r_1\, r_2\, \ldots\, r_{125}\, r_{126}\, r_{127} \tag{3.3}\]

is represented by the byte sequence

は、次のバイト列で表されます。

\[a_0\, a_1\, a_2\, \ldots\, a_{13}\, a_{14}\, a_{15}, \tag{3.4}\]
\[a_0\, a_1\, a_2\, \ldots\, a_{13}\, a_{14}\, a_{15}, \tag{3.4}\]

ここで、

\[\begin{aligned} a_0 &= \{r_0\, r_1\, \ldots\, r_7\}; \\ a_1 &= \{r_8\, r_9\, \ldots\, r_{15}\}; \\ &\vdots \\ a_{15} &= \{r_{120}\, r_{121}\, \ldots\, r_{127}\}. \end{aligned} \tag{3.5}\]
\[\begin{aligned} a_0 &= \{r_0\, r_1\, \ldots\, r_7\}; \\ a_1 &= \{r_8\, r_9\, \ldots\, r_{15}\}; \\ &\vdots \\ a_{15} &= \{r_{120}\, r_{121}\, \ldots\, r_{127}\}. \end{aligned} \tag{3.5}\]

As described in Section 3.2, the bits within any individual byte are indexed in decreasing order from left to right. This ordering is more natural for the finite field arithmetic on bytes that is described in Section 4. The two types of bit indices for byte sequences are illustrated in Table 2.

3.2節で述べたとおり、個々のバイト内のビットには左から右へ減少する順に添字を付けます。この順序は、4節で述べるバイト上の有限体演算にとってより自然です。バイト列に対する2種類のビット添字を表2に示します。

Table 2. Indices for bytes and bits

表2. バイトとビットの添字

Bit index in sequence0123456789101112131415...
Byte index01...
Bit index in byte7654321076543210...
列内のビット添字0123456789101112131415...
バイト添字01...
バイト内のビット添字7654321076543210...

3.4 The State

3.4 ステート

Internally, the algorithms for the AES block ciphers are performed on a two-dimensional (four-by-four) array of bytes called the state. In the state array, denoted by \(s\), each individual byte has two indices: a row index \(r\) in the range \(0 \le r < 4\) and a column index \(c\) in the range \(0 \le c < 4\). An individual byte of the state is denoted by either \(s_{r,c}\) or \(s[r,c]\).

AESブロック暗号のアルゴリズムは、内部的にはステートと呼ばれるバイトの2次元(4×4)配列に対して実行されます。\(s\) で表されるステート配列では、個々のバイトは2つの添字、すなわち \(0 \le r < 4\) の範囲の行添字 \(r\) と \(0 \le c < 4\) の範囲の列添字 \(c\) をもちます。ステートの個々のバイトは \(s_{r,c}\) または \(s[r,c]\) で表します。

In the specifications for the AES block cipher algorithms in Section 5, the first step is to copy the input array of bytes \(in_0, in_1, \ldots, in_{15}\) to the state array \(s\) as follows:

5節のAESブロック暗号アルゴリズムの仕様では、最初の手順として、入力バイト配列 \(in_0, in_1, \ldots, in_{15}\) を次のようにステート配列 \(s\) にコピーします。

\[s[r,c] = in[r+4c] \qquad \text{for } 0 \le r < 4 \text{ and } 0 \le c < 4. \tag{3.6}\]
\[s[r,c] = in[r+4c] \qquad \text{ただし } 0 \le r < 4 \text{ かつ } 0 \le c < 4. \tag{3.6}\]

A sequence of transformations is then applied to the state array, after which its final value is copied to the output array of bytes \(out_0, out_1, \ldots, out_{15}\) as follows:

次に、ステート配列に一連の変換を適用し、その後、ステート配列の最終値を次のように出力バイト配列 \(out_0, out_1, \ldots, out_{15}\) にコピーします。

\[out[r+4c] = s[r,c] \qquad \text{for } 0 \le r < 4 \text{ and } 0 \le c < 4. \tag{3.7}\]
\[out[r+4c] = s[r,c] \qquad \text{ただし } 0 \le r < 4 \text{ かつ } 0 \le c < 4. \tag{3.7}\]

The correspondence between the indices of the input and output with the indices of the state array is illustrated in Fig. 1.

入力および出力の添字とステート配列の添字との対応を図1に示します。

図表

図1. ステート配列の入力と出力。3 つの 4×4 の配列が左から右へ矢印でつながる。入力バイト、ステート配列、出力バイトである。入力バイトは列ごとに上から下へ番号が付き、第 1 列が in0~in3、第 2 列が in4~in7、第 3 列が in8~in11、第 4 列が in12~in15 である。ステート配列は s0,0~s3,3 で、添字は行、列の順であり、in0~in3 が s0,0~s3,0 に対応する。出力バイト out0~out15 は入力バイトと同じ並びである。列は 1 列おきに網掛けされている。

Figure 1. State array input and output

図1. ステート配列の入力と出力

3.5 Arrays of Words

3.5 ワードの配列

A word is a sequence of four bytes; a block consists of four words. The four columns of state array \(s\) are interpreted as an array \(v\) of four words as follows, in the notation of Fig. 1:

ワードは4バイトの列であり、ブロックは4ワードからなります。ステート配列 \(s\) の4つの列は、図1の表記を用いて、次のように4ワードの配列 \(v\) と解釈されます。

\[v_0 = \begin{pmatrix} s_{0,0} \\ s_{1,0} \\ s_{2,0} \\ s_{3,0} \end{pmatrix}, \quad v_1 = \begin{pmatrix} s_{0,1} \\ s_{1,1} \\ s_{2,1} \\ s_{3,1} \end{pmatrix}, \quad v_2 = \begin{pmatrix} s_{0,2} \\ s_{1,2} \\ s_{2,2} \\ s_{3,2} \end{pmatrix}, \quad v_3 = \begin{pmatrix} s_{0,3} \\ s_{1,3} \\ s_{2,3} \\ s_{3,3} \end{pmatrix}. \tag{3.8}\]
\[v_0 = \begin{pmatrix} s_{0,0} \\ s_{1,0} \\ s_{2,0} \\ s_{3,0} \end{pmatrix}, \quad v_1 = \begin{pmatrix} s_{0,1} \\ s_{1,1} \\ s_{2,1} \\ s_{3,1} \end{pmatrix}, \quad v_2 = \begin{pmatrix} s_{0,2} \\ s_{1,2} \\ s_{2,2} \\ s_{3,2} \end{pmatrix}, \quad v_3 = \begin{pmatrix} s_{0,3} \\ s_{1,3} \\ s_{2,3} \\ s_{3,3} \end{pmatrix}. \tag{3.8}\]

Thus, the column index \(c\) of \(s\) becomes the index for \(v\), and the row index \(r\) of \(s\) becomes the index for the four bytes in each word.

したがって、\(s\) の列添字 \(c\) は \(v\) の添字となり、\(s\) の行添字 \(r\) は各ワード内の4バイトの添字となります。

Given a one-dimensional array \(u\) of words, \(u[i]\) denotes the word that is indexed by \(i\), and the sequence of four words \(u[i], u[i+1], u[i+2], u[i+3]\) is denoted by \(u[i..i+3]\).

ワードの1次元配列 \(u\) が与えられたとき、\(u[i]\) は添字 \(i\) のワードを表し、4ワードの列 \(u[i], u[i+1], u[i+2], u[i+3]\) を \(u[i..i+3]\) で表します。

4. Mathematical Preliminaries

4. 数学的準備

For some transformations of the AES algorithms specified in Sec. 5, each byte in the state array is interpreted as one of the 256 elements of a finite field, also known as a Galois Field, denoted by \(\mathrm{GF}(2^8)\). 1

5節で規定するAESアルゴリズムの一部の変換では、ステート配列の各バイトを、ガロア体とも呼ばれ \(\mathrm{GF}(2^8)\) で表される有限体の256個の元の一つと解釈します。 1

In order to define addition and multiplication in \(\mathrm{GF}(2^8)\), each byte \(\{b_7\, b_6\, b_5\, b_4\, b_3\, b_2\, b_1\, b_0\}\) is interpreted as a polynomial, denoted by \(b(x)\), as follows:

\(\mathrm{GF}(2^8)\) における加算と乗算を定義するために、各バイト \(\{b_7\, b_6\, b_5\, b_4\, b_3\, b_2\, b_1\, b_0\}\) を、次のように \(b(x)\) で表される多項式と解釈します。

\[b(x) = b_7 x^7 + b_6 x^6 + b_5 x^5 + b_4 x^4 + b_3 x^3 + b_2 x^2 + b_1 x + b_0. \tag{4.1}\]
\[b(x) = b_7 x^7 + b_6 x^6 + b_5 x^5 + b_4 x^4 + b_3 x^3 + b_2 x^2 + b_1 x + b_0. \tag{4.1}\]

For example, \(\{01100011\}\) is represented by the polynomial \(x^6 + x^5 + x + 1\).

たとえば、\(\{01100011\}\) は多項式 \(x^6 + x^5 + x + 1\) で表されます。

4.1 Addition in \(\mathrm{GF}(2^8)\)

4.1 \(\mathrm{GF}(2^8)\) における加算

In order to add two elements in the finite field \(\mathrm{GF}(2^8)\), the coefficients of the polynomials that represent the elements are added modulo 2 (i.e., with the exclusive-OR operation, denoted by \(\oplus\)), so that \(1 \oplus 1 = 0\), \(1 \oplus 0 = 1\), and \(0 \oplus 0 = 0\).

有限体 \(\mathrm{GF}(2^8)\) の2つの元を加算するには、それらの元を表す多項式の係数を2を法として加算します(すなわち、\(\oplus\) で表される排他的論理和演算を用います)。したがって、\(1 \oplus 1 = 0\)、\(1 \oplus 0 = 1\)、\(0 \oplus 0 = 0\) となります。

Equivalently, two bytes can be added by applying the exclusive-OR operation to each pair of corresponding bits in the bytes. Thus, the sum of \(\{a_7\, a_6\, a_5\, a_4\, a_3\, a_2\, a_1\, a_0\}\) and \(\{b_7\, b_6\, b_5\, b_4\, b_3\, b_2\, b_1\, b_0\}\) is \(\{a_7 \oplus b_7\;\; a_6 \oplus b_6\;\; a_5 \oplus b_5\;\; a_4 \oplus b_4\;\; a_3 \oplus b_3\;\; a_2 \oplus b_2\;\; a_1 \oplus b_1\;\; a_0 \oplus b_0\}\). (In Section 5.1.4, this definition is extended to words.)

同等に、2つのバイトの加算は、両バイトの対応するビットの各組に排他的論理和演算を適用することで行えます。したがって、\(\{a_7\, a_6\, a_5\, a_4\, a_3\, a_2\, a_1\, a_0\}\) と \(\{b_7\, b_6\, b_5\, b_4\, b_3\, b_2\, b_1\, b_0\}\) の和は \(\{a_7 \oplus b_7\;\; a_6 \oplus b_6\;\; a_5 \oplus b_5\;\; a_4 \oplus b_4\;\; a_3 \oplus b_3\;\; a_2 \oplus b_2\;\; a_1 \oplus b_1\;\; a_0 \oplus b_0\}\) です(5.1.4節では、この定義をワードに拡張します)。

For example, the following three representations of addition are equivalent:

たとえば、加算の次の3つの表現は同等です。

\[\begin{aligned} &(x^6 + x^4 + x^2 + x + 1) + (x^7 + x + 1) = x^7 + x^6 + x^4 + x^2 && \text{(polynomial)} \\ &\{01010111\} \oplus \{10000011\} = \{11010100\} && \text{(binary)} \\ &\{57\} \oplus \{83\} = \{\mathrm{d4}\} && \text{(hexadecimal).} \end{aligned} \tag{4.2}\]
\[\begin{aligned} &(x^6 + x^4 + x^2 + x + 1) + (x^7 + x + 1) = x^7 + x^6 + x^4 + x^2 && \text{(多項式)} \\ &\{01010111\} \oplus \{10000011\} = \{11010100\} && \text{(2進数)} \\ &\{57\} \oplus \{83\} = \{\mathrm{d4}\} && \text{(16進数).} \end{aligned} \tag{4.2}\]

Because the coefficients of the polynomials are reduced modulo 2, the coefficient 1 is equivalent to the coefficient –1, so addition is equivalent to subtraction. For example, \(x^4 + x^2\) represents the same finite field element as \(x^4 - x^2\), \(-x^4 + x^2\), and \(-x^4 - x^2\). Similarly, the sum of any element with itself is the zero element.

多項式の係数は2を法として簡約されるため、係数1は係数–1と同等であり、加算は減算と同等です。たとえば、\(x^4 + x^2\) は \(x^4 - x^2\)、\(-x^4 + x^2\)、\(-x^4 - x^2\) と同じ有限体の元を表します。同様に、任意の元とそれ自身との和は零元です。

4.2 Multiplication in \(\mathrm{GF}(2^8)\)

4.2 \(\mathrm{GF}(2^8)\) における乗算

The symbol \(\bullet\) denotes multiplication in \(\mathrm{GF}\left(2^8\right)\). Conceptually, this multiplication is defined on two bytes in two steps: 1) the two polynomials that represent the bytes are multiplied as polynomials, and 2) the resulting polynomial is reduced modulo the following fixed polynomial:

記号 \(\bullet\) は \(\mathrm{GF}\left(2^8\right)\) における乗算を表します。概念的には、この乗算は2つのバイトに対して2段階で定義されます。1)バイトを表す2つの多項式を多項式として乗算し、2)得られた多項式を次の固定多項式を法として簡約します。

\[m(x) = x^8 + x^4 + x^3 + x + 1. \tag{4.3}\]
\[m(x) = x^8 + x^4 + x^3 + x + 1. \tag{4.3}\]

Within both steps, the individual coefficients of the polynomials are reduced modulo 2.

どちらの段階でも、多項式の個々の係数は2を法として簡約されます。

1 Information about the properties of finite fields can be found in textbooks, such as Michael Artin’s Algebra [4].
1 有限体の性質については、Michael Artin の Algebra [4] などの教科書を参照のこと。

Thus, if \(b(x)\) and \(c(x)\) represent bytes \(b\) and \(c\), then \(b \bullet c\) is represented by the following modular reduction of their product as polynomials:

したがって、\(b(x)\) と \(c(x)\) がバイト \(b\) と \(c\) を表すとき、\(b \bullet c\) は、両者の多項式としての積に対する次の剰余簡約で表されます。

\[b(x)c(x) \mod m(x). \tag{4.4}\]
\[b(x)c(x) \mod m(x). \tag{4.4}\]

The modular reduction by \(m(x)\) may be applied to intermediate steps in the calculation of \(b(x)c(x)\); consequently, it is useful to consider the special case that \(c(x) = x\) (i.e., \(c = \{02\}\)). In particular, the product \(b \bullet \{02\}\) can be expressed as a function of \(b\), denoted by XTIMES(\(b\)), as follows:

\(m(x)\) による剰余簡約は、\(b(x)c(x)\) の計算の途中段階に適用してもよいです。そのため、\(c(x) = x\)(すなわち \(c = \{02\}\))という特殊な場合を考えると有用です。具体的には、積 \(b \bullet \{02\}\) は、XTIMES(\(b\)) で表される \(b\) の関数として次のように表せます。

\[\mathrm{XTIMES}(b) = \begin{cases} \{b_6\ b_5\ b_4\ b_3\ b_2\ b_1\ b_0\ 0\} & \text{if } b_7 = 0 \\ \{b_6\ b_5\ b_4\ b_3\ b_2\ b_1\ b_0\ 0\} \oplus \{0\ 0\ 0\ 1\ 1\ 0\ 1\ 1\} & \text{if } b_7 = 1. \end{cases} \tag{4.5}\]
\[\mathrm{XTIMES}(b) = \begin{cases} \{b_6\ b_5\ b_4\ b_3\ b_2\ b_1\ b_0\ 0\} & \text{if } b_7 = 0 \\ \{b_6\ b_5\ b_4\ b_3\ b_2\ b_1\ b_0\ 0\} \oplus \{0\ 0\ 0\ 1\ 1\ 0\ 1\ 1\} & \text{if } b_7 = 1. \end{cases} \tag{4.5}\]

Multiplication by higher powers of \(x\) (such as \(\{04\}\), \(\{08\}\), and \(\{10\}\)) can be implemented by the repeated application of XTIMES(). For example, let \(b = \{57\}\):

\(x\) のより高いべき(\(\{04\}\)、\(\{08\}\)、\(\{10\}\) など)による乗算は、XTIMES() を繰り返し適用することで実装できます。たとえば、\(b = \{57\}\) とすると、

\[\begin{aligned} \{57\} \bullet \{01\} &= \{57\} \\ \{57\} \bullet \{02\} &= \mathrm{XTIMES}(\{57\}) = \{ae\} \\ \{57\} \bullet \{04\} &= \mathrm{XTIMES}(\{ae\}) = \{47\} \\ \{57\} \bullet \{08\} &= \mathrm{XTIMES}(\{47\}) = \{8e\} \\ \{57\} \bullet \{10\} &= \mathrm{XTIMES}(\{8e\}) = \{07\} \\ \{57\} \bullet \{20\} &= \mathrm{XTIMES}(\{07\}) = \{0e\} \\ \{57\} \bullet \{40\} &= \mathrm{XTIMES}(\{0e\}) = \{1c\} \\ \{57\} \bullet \{80\} &= \mathrm{XTIMES}(\{1c\}) = \{38\}. \end{aligned} \tag{4.6}\]
\[\begin{aligned} \{57\} \bullet \{01\} &= \{57\} \\ \{57\} \bullet \{02\} &= \mathrm{XTIMES}(\{57\}) = \{ae\} \\ \{57\} \bullet \{04\} &= \mathrm{XTIMES}(\{ae\}) = \{47\} \\ \{57\} \bullet \{08\} &= \mathrm{XTIMES}(\{47\}) = \{8e\} \\ \{57\} \bullet \{10\} &= \mathrm{XTIMES}(\{8e\}) = \{07\} \\ \{57\} \bullet \{20\} &= \mathrm{XTIMES}(\{07\}) = \{0e\} \\ \{57\} \bullet \{40\} &= \mathrm{XTIMES}(\{0e\}) = \{1c\} \\ \{57\} \bullet \{80\} &= \mathrm{XTIMES}(\{1c\}) = \{38\}. \end{aligned} \tag{4.6}\]

These products facilitate the computation of any multiple of \(\{57\}\). For example, because \(\{13\} = \{10\} \oplus \{02\} \oplus \{01\}\), it follows that

これらの積を用いると、\(\{57\}\) の任意の倍数を容易に計算できます。たとえば、\(\{13\} = \{10\} \oplus \{02\} \oplus \{01\}\) であるから、次が成り立ちます。

\[\begin{aligned} \{57\} \bullet \{13\} &= \{57\} \bullet (\{01\} \oplus \{02\} \oplus \{10\}) \\ &= \{57\} \oplus \{ae\} \oplus \{07\} \\ &= \{fe\}. \end{aligned} \tag{4.7}\]
\[\begin{aligned} \{57\} \bullet \{13\} &= \{57\} \bullet (\{01\} \oplus \{02\} \oplus \{10\}) \\ &= \{57\} \oplus \{ae\} \oplus \{07\} \\ &= \{fe\}. \end{aligned} \tag{4.7}\]

4.3 Multiplication of Words by a Fixed Matrix

4.3 ワードと固定行列の乗算

Two transformations – MIXCOLUMNS() and INVMIXCOLUMNS() – in the algorithms for the AES block ciphers can be expressed in terms of matrix multiplication. In particular, a distinct fixed matrix is specified for each transformation. For both matrices, each of the 16 entries of the matrix is a byte of a single specified word, denoted here by \([a_0, a_1, a_2, a_3]\).

AESブロック暗号のアルゴリズムにおける2つの変換、MIXCOLUMNS() と INVMIXCOLUMNS() は、行列の乗算によって表すことができます。具体的には、各変換に対して異なる固定行列が規定されます。どちらの行列でも、行列の16個の要素はそれぞれ、ここで \([a_0, a_1, a_2, a_3]\) と表す規定された単一のワードのいずれかのバイトです。

Given an input word \([b_0, b_1, b_2, b_3]\) to the transformation, the output word \([d_0, d_1, d_2, d_3]\) is determined by finite field arithmetic as follows:

変換への入力ワード \([b_0, b_1, b_2, b_3]\) が与えられたとき、出力ワード \([d_0, d_1, d_2, d_3]\) は有限体演算により次のように決まります。

\[\begin{aligned} d_0 &= (a_0 \bullet b_0) \oplus (a_3 \bullet b_1) \oplus (a_2 \bullet b_2) \oplus (a_1 \bullet b_3) \\ d_1 &= (a_1 \bullet b_0) \oplus (a_0 \bullet b_1) \oplus (a_3 \bullet b_2) \oplus (a_2 \bullet b_3) \\ d_2 &= (a_2 \bullet b_0) \oplus (a_1 \bullet b_1) \oplus (a_0 \bullet b_2) \oplus (a_3 \bullet b_3) \\ d_3 &= (a_3 \bullet b_0) \oplus (a_2 \bullet b_1) \oplus (a_1 \bullet b_2) \oplus (a_0 \bullet b_3). \end{aligned} \tag{4.8}\]
\[\begin{aligned} d_0 &= (a_0 \bullet b_0) \oplus (a_3 \bullet b_1) \oplus (a_2 \bullet b_2) \oplus (a_1 \bullet b_3) \\ d_1 &= (a_1 \bullet b_0) \oplus (a_0 \bullet b_1) \oplus (a_3 \bullet b_2) \oplus (a_2 \bullet b_3) \\ d_2 &= (a_2 \bullet b_0) \oplus (a_1 \bullet b_1) \oplus (a_0 \bullet b_2) \oplus (a_3 \bullet b_3) \\ d_3 &= (a_3 \bullet b_0) \oplus (a_2 \bullet b_1) \oplus (a_1 \bullet b_2) \oplus (a_0 \bullet b_3). \end{aligned} \tag{4.8}\]

The matrix form of Eq. (4.8) is

式 (4.8) の行列形式は次のとおりです。

\[\begin{bmatrix} d_0 \\ d_1 \\ d_2 \\ d_3 \end{bmatrix} = \begin{bmatrix} a_0 & a_3 & a_2 & a_1 \\ a_1 & a_0 & a_3 & a_2 \\ a_2 & a_1 & a_0 & a_3 \\ a_3 & a_2 & a_1 & a_0 \end{bmatrix} \begin{bmatrix} b_0 \\ b_1 \\ b_2 \\ b_3 \end{bmatrix}. \tag{4.9}\]
\[\begin{bmatrix} d_0 \\ d_1 \\ d_2 \\ d_3 \end{bmatrix} = \begin{bmatrix} a_0 & a_3 & a_2 & a_1 \\ a_1 & a_0 & a_3 & a_2 \\ a_2 & a_1 & a_0 & a_3 \\ a_3 & a_2 & a_1 & a_0 \end{bmatrix} \begin{bmatrix} b_0 \\ b_1 \\ b_2 \\ b_3 \end{bmatrix}. \tag{4.9}\]

4.4 Multiplicative Inverses in GF(\(2^8\))

4.4 GF(\(2^8\)) における乗法逆元

For a byte \(b \ne \{00\}\), its multiplicative inverse is the unique byte, denoted by \(b^{-1}\), such that

バイト \(b \ne \{00\}\) の乗法逆元とは、次を満たす一意のバイトであり、\(b^{-1}\) で表します。

\[b \bullet b^{-1} = \{01\}. \tag{4.10}\]
\[b \bullet b^{-1} = \{01\}. \tag{4.10}\]

The definition of the SUBBYTES() transformation in the specifications of the AES block cipher involves multiplicative inverses in \(\mathrm{GF}(2^8)\), which can be calculated as follows:

AESブロック暗号の仕様における SUBBYTES() 変換の定義には \(\mathrm{GF}(2^8)\) における乗法逆元が含まれ、これは次のように計算できます。

\[b^{-1} = b^{254}. \tag{4.11}\]
\[b^{-1} = b^{254}. \tag{4.11}\]

Alternatively, let \(b(x)\) be the polynomial that represents \(b\). The extended Euclidean algorithm [5] can be applied to \(b(x)\) and \(m(x)\) to find polynomials \(a(x)\) and \(c(x)\) such that

あるいは、\(b(x)\) を \(b\) を表す多項式とします。拡張ユークリッドアルゴリズム [5] を \(b(x)\) と \(m(x)\) に適用すると、次を満たす多項式 \(a(x)\) と \(c(x)\) が求まります。

\[b(x)a(x) + m(x)c(x) = 1. \tag{4.12}\]
\[b(x)a(x) + m(x)c(x) = 1. \tag{4.12}\]

It follows that \(a(x)\) is the polynomial that represents \(b^{-1}\).

このとき、\(a(x)\) が \(b^{-1}\) を表す多項式です。

5. Algorithm Specifications

5. アルゴリズムの仕様

The general function for executing AES-128, AES-192, or AES-256 is denoted by CIPHER(); its inverse is denoted by INVCIPHER().2

AES-128、AES-192、AES-256を実行する汎用関数を CIPHER() で表し、その逆を INVCIPHER() で表します。2

The core of the algorithms for CIPHER() and INVCIPHER() is a sequence of fixed transformations of the state called a round. Each round requires an additional input called the round key; the round key is a block that is usually represented as a sequence of four words (i.e., 16 bytes).

CIPHER() と INVCIPHER() のアルゴリズムの中核は、ラウンドと呼ばれる、ステートに対する固定された一連の変換です。各ラウンドはラウンド鍵と呼ばれる追加の入力を必要とします。ラウンド鍵はブロックであり、通常は4ワード(すなわち16バイト)の列として表されます。

An expansion routine, denoted by KEYEXPANSION(), takes the block cipher key as input and generates the round keys as output. In particular, the input to KEYEXPANSION() is represented as an array of words, denoted by key, and the output is an expanded array of words, denoted by w, called the key schedule.

KEYEXPANSION() で表される拡張ルーチンは、ブロック暗号の鍵を入力として受け取り、ラウンド鍵を出力として生成します。具体的には、KEYEXPANSION() への入力は key で表されるワードの配列として表され、出力は w で表される拡張されたワードの配列であり、鍵スケジュールと呼ばれます。

The block ciphers AES-128, AES-192, and AES-256 differ in three respects: 1) the length of the key; 2) the number of rounds, which determines the size of the required key schedule; and 3) the specification of the recursion within KEYEXPANSION(). For each algorithm, the number of rounds is denoted by Nr, and the number of words of the key is denoted by Nk. (The number of words in the state is denoted by Nb for Rijndael in general; in this Standard, \(Nb = 4\).) The specific values of Nk, Nb, and Nr are given in Table 3. No other configurations of Rijndael conform to this Standard.

ブロック暗号AES-128、AES-192、AES-256は、次の3点で異なります。1)鍵の長さ、2)ラウンド数(必要な鍵スケジュールのサイズを決める)、3)KEYEXPANSION() 内の再帰の仕様。各アルゴリズムについて、ラウンド数を Nr、鍵のワード数を Nk で表す(ステート内のワード数は、Rijndael 一般では Nb で表します。本標準では \(Nb = 4\) です)。Nk、Nb、Nr の具体的な値を表3に示します。Rijndael のこれ以外の構成は本標準に適合しません。

For implementation issues relating to the key length, block size, and number of rounds, see Section 6.3.

鍵長、ブロックサイズ、ラウンド数に関する実装上の問題については、6.3節を参照のこと。

Table 3. Key-Block-Round Combinations

表3. 鍵・ブロック・ラウンドの組合せ

Key length| Block size| Number of rounds
Nk(in bits)Nb(in bits)Nr
AES-1284128412810
AES-1926192412812
AES-2568256412814
鍵長| ブロックサイズ| ラウンド数
Nk(ビット)Nb(ビット)Nr
AES-1284128412810
AES-1926192412812
AES-2568256412814

The three inputs to CIPHER() are: 1) the data input in, which is a block represented as a linear array of 16 bytes; 2) the number of rounds Nr for the instance; and 3) the round keys. Thus,

CIPHER() への3つの入力は、1)16バイトの線形配列として表されるブロックであるデータ入力 in、2)そのインスタンスのラウンド数 Nr、3)ラウンド鍵です。したがって、

\[\begin{aligned}\text{AES-128}(in,key) &= \mathrm{CIPHER}(in,10,\mathrm{KEYEXPANSION}(key))\\ \text{AES-192}(in,key) &= \mathrm{CIPHER}(in,12,\mathrm{KEYEXPANSION}(key))\\ \text{AES-256}(in,key) &= \mathrm{CIPHER}(in,14,\mathrm{KEYEXPANSION}(key)).\end{aligned} \tag{5.1}\]
\[\begin{aligned}\text{AES-128}(in,key) &= \mathrm{CIPHER}(in,10,\mathrm{KEYEXPANSION}(key))\\ \text{AES-192}(in,key) &= \mathrm{CIPHER}(in,12,\mathrm{KEYEXPANSION}(key))\\ \text{AES-256}(in,key) &= \mathrm{CIPHER}(in,14,\mathrm{KEYEXPANSION}(key)).\end{aligned} \tag{5.1}\]

The inverse permutations are defined by replacing CIPHER() with INVCIPHER() in Eq. 5.1.

逆置換は、式5.1において CIPHER() を INVCIPHER() に置き換えることで定義されます。

2 Informally, these functions are sometimes called “encryption” and “decryption,” but neutral terminology is appropriate because there are other applications of block ciphers besides encryption.
2 これらの関数は、非公式には「暗号化」および「復号」と呼ばれることもありますが、ブロック暗号には暗号化以外の用途もあるため、中立的な用語を用いるのが適切です。

The specifications of CIPHER(), KEYEXPANSION(), and INVCIPHER() are given in Sections 5.1, 5.2, and 5.3, respectively.

CIPHER()、KEYEXPANSION()、INVCIPHER() の仕様は、それぞれ5.1節、5.2節、5.3節に示します。

5.1 CIPHER()

5.1 CIPHER()

The rounds in the specification of CIPHER() are composed of the following four byte-oriented transformations on the state:

CIPHER() の仕様におけるラウンドは、ステートに対する次の4つのバイト指向の変換で構成されます。

•SUBBYTES() applies a substitution table (S-box) to each byte.

•SUBBYTES() は、各バイトに置換表(Sボックス)を適用します。

•SHIFTROWS() shifts rows of the state array by different offsets.

•SHIFTROWS() は、ステート配列の各行をそれぞれ異なるオフセットだけシフトします。

•MIXCOLUMNS() mixes the data within each column of the state array.

•MIXCOLUMNS() は、ステート配列の各列内でデータを混合します。

•ADDROUNDKEY() combines a round key with the state.

•ADDROUNDKEY() は、ラウンド鍵をステートと結合します。

The four transformations are specified in Sections 5.1.1–5.1.4. In those specifications, the transformed bit, byte, or block is denoted by appending the symbol \({}'\) as a superscript on the original variable \(\big(\)i.e., by \(b'_i\), \(b'\), \(s'_{i,j}\), or \(s'\big)\).

これら4つの変換は5.1.1~5.1.4節で規定します。これらの仕様では、変換後のビット、バイト、またはブロックを、元の変数に上付きの記号 \({}'\) を付けて表す \(\big(\)すなわち \(b'_i\)、\(b'\)、\(s'_{i,j}\)、または \(s'\big)\)。

The round keys for ADDROUNDKEY() are generated by KEYEXPANSION(), which is specified in Section 5.2. In particular, the key schedule is represented as an array \(w\) of \(4 * (Nr + 1)\) words.

ADDROUNDKEY() のラウンド鍵は、5.2節で規定する KEYEXPANSION() によって生成されます。具体的には、鍵スケジュールは \(4 * (Nr + 1)\) ワードの配列 \(w\) として表されます。

CIPHER() is specified in the pseudocode in Alg. 1.

CIPHER() はアルゴリズム1の擬似コードで規定します。

Algorithm 1 Pseudocode for CIPHER()

アルゴリズム1 CIPHER() の擬似コード

1: procedure CIPHER(in, Nr, w)
2:   state ← in ▷ See Sec. 3.4
3:   state ← ADDROUNDKEY(state, w[0..3]) ▷ See Sec. 5.1.4
4:   for round from 1 to Nr − 1 do
5:     state ← SUBBYTES(state) ▷ See Sec. 5.1.1
6:     state ← SHIFTROWS(state) ▷ See Sec. 5.1.2
7:     state ← MIXCOLUMNS(state) ▷ See Sec. 5.1.3
8:     state ← ADDROUNDKEY(state, w[4 ∗ round..4 ∗ round + 3])
9:   end for
10:   state ← SUBBYTES(state)
11:   state ← SHIFTROWS(state)
12:   state ← ADDROUNDKEY(state, w[4 ∗ Nr..4 ∗ Nr + 3])
13:   return state ▷ See Sec. 3.4
14: end procedure
原文のみ

The first step (Line 2) is to copy the input into the state array using the conventions from Sec. 3.4. After an initial round key addition (Line 3), the state array is transformed by Nr applications of the round function (Lines 4–12); the final round (Lines 10–12) differs in that the MIXCOLUMNS() transformation is omitted. The final state is then returned as the output (Line 13), as described in Section 3.4.

最初の手順(2行目)では、3.4節の規約に従って入力をステート配列にコピーします。最初のラウンド鍵の加算(3行目)の後、ステート配列はラウンド関数を Nr 回適用することで変換されます(4~12行目)。最終ラウンド(10~12行目)は、MIXCOLUMNS() 変換が省略される点が異なります。その後、3.4節で述べたとおり、最終的なステートが出力として返されます(13行目)。

5.1.1 SUBBYTES()

5.1.1 SUBBYTES()

SUBBYTES() is an invertible, non-linear transformation of the state in which a substitution table, called an S-box, is applied independently to each byte in the state. The AES S-box is denoted by SBOX().

SUBBYTES() は、ステートに対する可逆な非線形変換であり、Sボックスと呼ばれる置換表をステート内の各バイトに独立に適用します。AESのSボックスを SBOX() で表します。

Let \(b\) denote an input byte to SBOX(), and let \(c\) denote the constant byte {01100011}. The output byte \(b' = \mathrm{SBOX}(b)\) is constructed by composing the following two transformations:

\(b\) を SBOX() への入力バイトとし、\(c\) を定数バイト {01100011} とします。出力バイト \(b' = \mathrm{SBOX}(b)\) は、次の2つの変換を合成して構成されます。

1.Define an intermediate value \(\tilde{b}\), as follows, where \(b^{-1}\) is the multiplicative inverse of \(b\), as described in Section 4.4:

1.中間値 \(\tilde{b}\) を次のように定義します。ここで、\(b^{-1}\) は 4.4 節で述べた \(b\) の乗法逆元です。

\[\tilde{b} = \begin{cases} \{00\} & \text{if } b = \{00\} \\ b^{-1} & \text{if } b \neq \{00\}. \end{cases} \tag{5.2}\]
\[\tilde{b} = \begin{cases} \{00\} & \text{if } b = \{00\} \\ b^{-1} & \text{if } b \neq \{00\}. \end{cases} \tag{5.2}\]

2.Apply the following affine transformation of the bits of \(\tilde{b}\) to produce the bits of \(b'\):

2.\(\tilde{b}\) のビットに次のアフィン変換を適用して、\(b'\) のビットを得ます。

\[b'_i = \tilde{b}_i \oplus \tilde{b}_{(i+4) \bmod 8} \oplus \tilde{b}_{(i+5) \bmod 8} \oplus \tilde{b}_{(i+6) \bmod 8} \oplus \tilde{b}_{(i+7) \bmod 8} \oplus c_i . \tag{5.3}\]
\[b'_i = \tilde{b}_i \oplus \tilde{b}_{(i+4) \bmod 8} \oplus \tilde{b}_{(i+5) \bmod 8} \oplus \tilde{b}_{(i+6) \bmod 8} \oplus \tilde{b}_{(i+7) \bmod 8} \oplus c_i . \tag{5.3}\]

The matrix form of Eq. (5.3) is given by Eq. (5.4) below:

式 (5.3) の行列形式は、次の式 (5.4) で与えられます。

\[\begin{bmatrix} b'_0 \\ b'_1 \\ b'_2 \\ b'_3 \\ b'_4 \\ b'_5 \\ b'_6 \\ b'_7 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 1 & 1 & 0 & 0 & 0 & 1 & 1 & 1 \\ 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1 \\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \\ 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \end{bmatrix} \begin{bmatrix} \tilde{b}_0 \\ \tilde{b}_1 \\ \tilde{b}_2 \\ \tilde{b}_3 \\ \tilde{b}_4 \\ \tilde{b}_5 \\ \tilde{b}_6 \\ \tilde{b}_7 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 0 \\ 0 \\ 0 \\ 1 \\ 1 \\ 0 \end{bmatrix} . \tag{5.4}\]
\[\begin{bmatrix} b'_0 \\ b'_1 \\ b'_2 \\ b'_3 \\ b'_4 \\ b'_5 \\ b'_6 \\ b'_7 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 1 & 1 & 0 & 0 & 0 & 1 & 1 & 1 \\ 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1 \\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \\ 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \end{bmatrix} \begin{bmatrix} \tilde{b}_0 \\ \tilde{b}_1 \\ \tilde{b}_2 \\ \tilde{b}_3 \\ \tilde{b}_4 \\ \tilde{b}_5 \\ \tilde{b}_6 \\ \tilde{b}_7 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 0 \\ 0 \\ 0 \\ 1 \\ 1 \\ 0 \end{bmatrix} . \tag{5.4}\]

Figure 2 illustrates how SUBBYTES() transforms the state.

図 2 に、SUBBYTES() がステートをどのように変換するかを示します。

図表

図 2. SUBBYTES() の図解。左に 4×4 のステート配列 s0,0~s3,3、右に s′0,0~s′3,3 がある。左の配列で強調された 1 バイト sr,c から、S-Box(Sボックス)と記された箱を通る曲線の矢印が、右の配列の同じ位置のバイト s′r,c へ向かう。

Figure 2. Illustration of SUBBYTES()

図 2. SUBBYTES() の図解

The AES S-box is presented in hexadecimal form in Table 4. For example, if \(s_{r,c} = \{53\}\), then the substitution value would be determined by the intersection of the row with index ‘5’ and the column with index ‘3’ in Table 4, so that \(s'_{r,c} = \{\mathtt{ed}\}\).

AES のSボックスを表 4 に 16 進形式で示します。例えば、\(s_{r,c} = \{53\}\) であれば、置換値は表 4 においてインデックス‘5’の行とインデックス‘3’の列の交点によって決まり、\(s'_{r,c} = \{\mathtt{ed}\}\) となります。

Table 4. SBOX(): substitution values for the byte xy (in hexadecimal format)

表 4. SBOX():バイト xy に対する置換値(16 進形式)

y
0123456789abcdef
0637c777bf26b6fc53001672bfed7ab76
1ca82c97dfa5947f0add4a2af9ca472c0
2b7fd9326363ff7cc34a5e5f171d83115
304c723c31896059a071280e2eb27b275
409832c1a1b6e5aa0523bd6b329e32f84
553d100ed20fcb15b6acbbe394a4c58cf
6d0efaafb434d338545f9027f503c9fa8
x751a3408f929d38f5bcb6da2110fff3d2
8cd0c13ec5f974417c4a77e3d645d1973
960814fdc222a908846eeb814de5e0bdb
ae0323a0a4906245cc2d3ac629195e479
be7c8376d8dd54ea96c56f4ea657aae08
cba78252e1ca6b4c6e8dd741f4bbd8b8a
d703eb5664803f60e613557b986c11d9e
ee1f8981169d98e949b1e87e9ce5528df
f8ca1890dbfe6426841992d0fb054bb16
y
0123456789abcdef
0637c777bf26b6fc53001672bfed7ab76
1ca82c97dfa5947f0add4a2af9ca472c0
2b7fd9326363ff7cc34a5e5f171d83115
304c723c31896059a071280e2eb27b275
409832c1a1b6e5aa0523bd6b329e32f84
553d100ed20fcb15b6acbbe394a4c58cf
6d0efaafb434d338545f9027f503c9fa8
x751a3408f929d38f5bcb6da2110fff3d2
8cd0c13ec5f974417c4a77e3d645d1973
960814fdc222a908846eeb814de5e0bdb
ae0323a0a4906245cc2d3ac629195e479
be7c8376d8dd54ea96c56f4ea657aae08
cba78252e1ca6b4c6e8dd741f4bbd8b8a
d703eb5664803f60e613557b986c11d9e
ee1f8981169d98e949b1e87e9ce5528df
f8ca1890dbfe6426841992d0fb054bb16

5.1.2 SHIFTROWS()

5.1.2 SHIFTROWS()

SHIFTROWS() is a transformation of the state in which the bytes in the last three rows of the state are cyclically shifted. The number of positions by which the bytes are shifted depends on the row index \(r\), as follows:

SHIFTROWS() は、ステートの最後の 3 行のバイトを巡回シフトするステートの変換です。バイトをシフトする位置の数は、次のように行インデックス \(r\) に依存します。

\[s'_{r,c} = s_{r,(c+r) \bmod 4} \qquad \text{for } 0 \le r < 4 \text{ and } 0 \le c < 4. \tag{5.5}\]
\[s'_{r,c} = s_{r,(c+r) \bmod 4} \qquad \text{for } 0 \le r < 4 \text{ and } 0 \le c < 4. \tag{5.5}\]

SHIFTROWS() is illustrated in Figure 3. In that representation of the state, the effect is to move each byte by \(r\) positions to the left in the row, cycling the left-most \(r\) bytes around to the right end of the row. The first row, where \(r = 0\), is unchanged.

SHIFTROWS() を図 3 に示します。このステートの表現では、各バイトを行内で左へ \(r\) 位置移動させ、左端の \(r\) バイトを行の右端へ巡回させる効果をもちます。\(r = 0\) である第 1 行は変化しません。

図表

図 3. SHIFTROWS() の図解。上部では、4 バイトの行 sr,0, sr,1, sr,2, sr,3 から、ShiftRows() と記された箱を通る曲線の矢印が、行 s′r,0, s′r,1, s′r,2, s′r,3 へ向かう。下部では、左にステート s(s0,0~s3,3)、右に結果のステート s′ がある。s′ の第 0 行は変わらず(s0,0, s0,1, s0,2, s0,3)、第 1 行は s1,1, s1,2, s1,3, s1,0、第 2 行は s2,2, s2,3, s2,0, s2,1、第 3 行は s3,3, s3,0, s3,1, s3,2 である。2 つの配列の間には、第 1~3 行のそれぞれについて、4 マスのうち左端の 1、2、3 マスを網掛けし、左端から右端へ回り込む矢印を付けた小さな図記号がある。

Figure 3. Illustration of SHIFTROWS()

図 3. SHIFTROWS() の図解

5.1.3 MIXCOLUMNS()

5.1.3 MIXCOLUMNS()

MIXCOLUMNS() is a transformation of the state that multiplies each of the four columns of the state by a single fixed matrix, as described in Section 4.3, with its entries taken from the following word:

MIXCOLUMNS() は、4.3 節で述べたとおり、ステートの 4 つの列のそれぞれに単一の固定行列を乗じるステートの変換です。この行列の成分は次のワードから取られます。

\[[a_0, a_1, a_2, a_3] = [\{02\}, \{01\}, \{01\}, \{03\}]. \tag{5.6}\]
\[[a_0, a_1, a_2, a_3] = [\{02\}, \{01\}, \{01\}, \{03\}]. \tag{5.6}\]

したがって、

\[\begin{bmatrix} s'_{0,c} \\ s'_{1,c} \\ s'_{2,c} \\ s'_{3,c} \end{bmatrix} = \begin{bmatrix} 02 & 03 & 01 & 01 \\ 01 & 02 & 03 & 01 \\ 01 & 01 & 02 & 03 \\ 03 & 01 & 01 & 02 \end{bmatrix} \begin{bmatrix} s_{0,c} \\ s_{1,c} \\ s_{2,c} \\ s_{3,c} \end{bmatrix} \quad \text{for } 0 \le c < 4, \tag{5.7}\]
\[\begin{bmatrix} s'_{0,c} \\ s'_{1,c} \\ s'_{2,c} \\ s'_{3,c} \end{bmatrix} = \begin{bmatrix} 02 & 03 & 01 & 01 \\ 01 & 02 & 03 & 01 \\ 01 & 01 & 02 & 03 \\ 03 & 01 & 01 & 02 \end{bmatrix} \begin{bmatrix} s_{0,c} \\ s_{1,c} \\ s_{2,c} \\ s_{3,c} \end{bmatrix} \quad \text{for } 0 \le c < 4, \tag{5.7}\]

so that the individual output bytes are defined as follows:

となり、個々の出力バイトは次のように定義されます。

\[\begin{aligned} s'_{0,c} &= (\{02\} \bullet s_{0,c}) \oplus (\{03\} \bullet s_{1,c}) \oplus s_{2,c} \oplus s_{3,c} \\ s'_{1,c} &= s_{0,c} \oplus (\{02\} \bullet s_{1,c}) \oplus (\{03\} \bullet s_{2,c}) \oplus s_{3,c} \\ s'_{2,c} &= s_{0,c} \oplus s_{1,c} \oplus (\{02\} \bullet s_{2,c}) \oplus (\{03\} \bullet s_{3,c}) \\ s'_{3,c} &= (\{03\} \bullet s_{0,c}) \oplus s_{1,c} \oplus s_{2,c} \oplus (\{02\} \bullet s_{3,c}). \end{aligned} \tag{5.8}\]
\[\begin{aligned} s'_{0,c} &= (\{02\} \bullet s_{0,c}) \oplus (\{03\} \bullet s_{1,c}) \oplus s_{2,c} \oplus s_{3,c} \\ s'_{1,c} &= s_{0,c} \oplus (\{02\} \bullet s_{1,c}) \oplus (\{03\} \bullet s_{2,c}) \oplus s_{3,c} \\ s'_{2,c} &= s_{0,c} \oplus s_{1,c} \oplus (\{02\} \bullet s_{2,c}) \oplus (\{03\} \bullet s_{3,c}) \\ s'_{3,c} &= (\{03\} \bullet s_{0,c}) \oplus s_{1,c} \oplus s_{2,c} \oplus (\{02\} \bullet s_{3,c}). \end{aligned} \tag{5.8}\]

Figure 4 illustrates MIXCOLUMNS().

図 4 に MIXCOLUMNS() を示します。

図表

図 4. MIXCOLUMNS() の図解。左にステート s、右にステート s′ の 4×4 の配列がある。左の配列から 1 つの列 s0,c, s1,c, s2,c, s3,c が浮き出して描かれ、MixColumns() と記された箱を通る曲線の矢印が、右の配列から浮き出した列 s′0,c, s′1,c, s′2,c, s′3,c へ向かう。

Figure 4. Illustration of MIXCOLUMNS()

図 4. MIXCOLUMNS() の図解

5.1.4 ADDROUNDKEY()

5.1.4 ADDROUNDKEY()

ADDROUNDKEY() is a transformation of the state in which a round key is combined with the state by applying the bitwise XOR operation. In particular, each round key consists of four words from the key schedule (described in Section 5.2), each of which is combined with a column of the state as follows:

ADDROUNDKEY() は、ビットごとの XOR 演算を適用してラウンド鍵をステートと結合するステートの変換です。具体的には、各ラウンド鍵は鍵スケジュール(5.2 節で述べる)の 4 つのワードからなり、その各ワードが次のようにステートの 1 つの列と結合されます。

\[[s'_{0,c}, s'_{1,c}, s'_{2,c}, s'_{3,c}] = [s_{0,c}, s_{1,c}, s_{2,c}, s_{3,c}] \oplus [w_{(4 \ast round+c)}] \quad \text{for } 0 \le c < 4 \tag{5.9}\]
\[[s'_{0,c}, s'_{1,c}, s'_{2,c}, s'_{3,c}] = [s_{0,c}, s_{1,c}, s_{2,c}, s_{3,c}] \oplus [w_{(4 \ast round+c)}] \quad \text{for } 0 \le c < 4 \tag{5.9}\]

where \(round\) is a value in the range \(0 \le round \le Nr\), and \(w[i]\) is the array of key schedule words described in Section 5.2. In the specification of CIPHER(), ADDROUNDKEY() is invoked \(Nr+1\) times — once prior to the first application of the round function (see Alg. 1) and once within each of the \(Nr\) rounds, when \(1 \le round \le Nr\).

ここで、\(round\) は \(0 \le round \le Nr\) の範囲の値であり、\(w[i]\) は 5.2 節で述べる鍵スケジュールのワードの配列です。CIPHER() の仕様では、ADDROUNDKEY() は \(Nr+1\) 回呼び出されます。すなわち、ラウンド関数の最初の適用の前に 1 回(Alg. 1 を参照)、そして \(1 \le round \le Nr\) のときに \(Nr\) 個のラウンドのそれぞれの中で 1 回ずつです。

The action of this transformation is illustrated in Fig. 5, where \(l = 4 \ast round\). The byte address within words of the key schedule was described in Sec. 3.5.

この変換の動作を図 5 に示します。ここで \(l = 4 \ast round\) です。鍵スケジュールのワード内でのバイトのアドレスについては 3.5 節で述べました。

図表

図 5. ADDROUNDKEY() の図解。左に列 s0,c, s1,c, s2,c, s3,c が浮き出した 4×4 のステート配列、中央にワード wl+c が浮き出した鍵スケジュールの 4 ワード wl, wl+1, wl+2, wl+3、右に列 s′0,c, s′1,c, s′2,c, s′3,c が浮き出した結果のステート配列がある。ステート配列とワードの間に ⊕ の記号があり、曲線の矢印がステートの列から wl+c を通って結果の列へ向かう。ワードの上に l = 4 * round と記されている。

Figure 5. Illustration of ADDROUNDKEY()

図 5. ADDROUNDKEY() の図解

5.2 KEYEXPANSION()

5.2 KEYEXPANSION()

KEYEXPANSION() is a routine that is applied to the key to generate 4 ∗ (Nr + 1) words. Thus, four words are generated for each of the Nr + 1 applications of ADDROUNDKEY() within the specification of CIPHER(), as described in Section 5.1.4. The output of the routine consists of a linear array of words, denoted by w[i], where i is in the range 0 ≤ i < 4 ∗ (Nr + 1).

KEYEXPANSION() は、鍵に適用して 4 ∗ (Nr + 1) 個のワードを生成するルーチンです。したがって、5.1.4 節で述べたとおり、CIPHER() の仕様における ADDROUNDKEY() の Nr + 1 回の適用のそれぞれに対して 4 つのワードが生成されます。このルーチンの出力は w[i] で表されるワードの線形配列からなり、i は 0 ≤ i < 4 ∗ (Nr + 1) の範囲にあります。

KEYEXPANSION() invokes 10 fixed words denoted by Rcon[j] for 1 ≤ j ≤ 10. These 10 words are called the round constants. For AES-128, a distinct round constant is called in the generation of each of the 10 round keys. For AES-192 and AES-256, the key expansion routine calls the first eight and seven of these same constants, respectively. The values of Rcon[j] are given in hexadecimal notation in Table 5:

KEYEXPANSION() は、1 ≤ j ≤ 10 について Rcon[j] で表される 10 個の固定ワードを呼び出します。これら 10 個のワードをラウンド定数と呼びます。AES-128 では、10 個のラウンド鍵それぞれの生成において異なるラウンド定数が 1 つずつ呼び出されます。AES-192 と AES-256 では、鍵拡張ルーチンはこれら同じ定数のうち、それぞれ最初の 8 個と 7 個を呼び出します。Rcon[j] の値を表 5 に 16 進表記で示します。

Table 5. Round constants

表 5. ラウンド定数

jRcon[j]jRcon[j]
1[01,00,00,00]6[20,00,00,00]
2[02,00,00,00]7[40,00,00,00]
3[04,00,00,00]8[80,00,00,00]
4[08,00,00,00]9[1b,00,00,00]
5[10,00,00,00]10[36,00,00,00]
jRcon[j]jRcon[j]
1[01,00,00,00]6[20,00,00,00]
2[02,00,00,00]7[40,00,00,00]
3[04,00,00,00]8[80,00,00,00]
4[08,00,00,00]9[1b,00,00,00]
5[10,00,00,00]10[36,00,00,00]

The value of the left-most byte of Rcon[j] in polynomial form is \(x^{j-1}\). Note that for j > 0, these bytes may be generated by successively applying XTIMES() to the byte represented by \(x^{j-1}\) (see Eq. 4.5).

Rcon[j] の左端のバイトの値は、多項式形式で \(x^{j-1}\) です。j > 0 について、これらのバイトは、\(x^{j-1}\) で表されるバイトに XTIMES() を順次適用することで生成できることに注意してください(式 4.5 を参照してください)。

Two transformations on words are called within KEYEXPANSION(): ROTWORD() and SUBWORD(). Given an input word represented as a sequence \([a_0, a_1, a_2, a_3]\) of four bytes,

KEYEXPANSION() の中では、ワードに対する 2 つの変換 ROTWORD() と SUBWORD() が呼び出されます。4 バイトの列 \([a_0, a_1, a_2, a_3]\) として表される入力ワードが与えられたとき、

\[\mathrm{ROTWORD}([a_0, a_1, a_2, a_3]) = [a_1, a_2, a_3, a_0], \tag{5.10}\]
\[\mathrm{ROTWORD}([a_0, a_1, a_2, a_3]) = [a_1, a_2, a_3, a_0], \tag{5.10}\]

および

\[\mathrm{SUBWORD}([a_0, \ldots, a_3]) = [\mathrm{SBOX}(a_0), \mathrm{SBOX}(a_1), \mathrm{SBOX}(a_2), \mathrm{SBOX}(a_3)]. \tag{5.11}\]
\[\mathrm{SUBWORD}([a_0, \ldots, a_3]) = [\mathrm{SBOX}(a_0), \mathrm{SBOX}(a_1), \mathrm{SBOX}(a_2), \mathrm{SBOX}(a_3)]. \tag{5.11}\]

The expansion of the key proceeds according to the pseudocode in Alg. 2. The first Nk words of the expanded key are the key itself. Every subsequent word w[i] is generated recursively from the preceding word, w[i − 1], and the word Nk positions earlier, w[i − Nk], as follows:

鍵の拡張は、Alg. 2 の擬似コードに従って進みます。拡張鍵の最初の Nk 個のワードは鍵そのものです。それ以降の各ワード w[i] は、直前のワード w[i − 1] と Nk 位置前のワード w[i − Nk] から、次のように再帰的に生成されます。

•If i is a multiple of Nk, then w[i] = w[i − Nk] ⊕ SUBWORD(ROTWORD(w[i − 1])) ⊕ Rcon[i/Nk].

•i が Nk の倍数であれば、w[i] = w[i − Nk] ⊕ SUBWORD(ROTWORD(w[i − 1])) ⊕ Rcon[i/Nk] とします。

•For AES-256, if i + 4 is a multiple of 8, then w[i] = w[i − Nk] ⊕ SUBWORD(w[i − 1]).

•AES-256 では、i + 4 が 8 の倍数であれば、w[i] = w[i − Nk] ⊕ SUBWORD(w[i − 1]) とします。

•For all other cases, w[i] = w[i − Nk] ⊕ w[i − 1].

•それ以外のすべての場合は、w[i] = w[i − Nk] ⊕ w[i − 1] とします。

Algorithm 2 Pseudocode for KEYEXPANSION()

Algorithm 2 KEYEXPANSION() の擬似コード

1: procedure KEYEXPANSION(key)
2:   i ← 0
3:   while i ≤ Nk − 1 do
4:     w[i] ← key[4 ∗ i..4 ∗ i + 3]
5:     i ← i + 1
6:   end while ▷ When the loop concludes, i = Nk.
7:   while i ≤ 4 ∗ Nr + 3 do
8:     temp ← w[i − 1]
9:     if i mod Nk = 0 then
10:       temp ← SUBWORD(ROTWORD(temp)) ⊕ Rcon[i/Nk]
11:     else if Nk > 6 and i mod Nk = 4 then
12:       temp ← SUBWORD(temp)
13:     end if
14:     w[i] ← w[i − Nk] ⊕ temp
15:     i ← i + 1
16:   end while
17:   return w
18: end procedure
原文のみ

Figures 6, 7, and 8 illustrate KEYEXPANSION() for AES-128, AES-192, and AES-256.

図 6、図 7、図 8 に、AES-128、AES-192、AES-256 に対する KEYEXPANSION() を示します。

5.3 INVCIPHER()

5.3 INVCIPHER()

To implement INVCIPHER(), the transformations in the specification of CIPHER() (Section 5.1) are inverted and executed in reverse order. The inverted transformations of the state — denoted by INVSHIFTROWS(), INVSUBBYTES(), INVMIXCOLUMNS(), and ADDROUNDKEY() — are described in Sections 5.3.1–5.3.4.

INVCIPHER() を実装するには、CIPHER() の仕様(5.1 節)における変換を逆変換にし、逆の順序で実行します。ステートの逆変換は INVSHIFTROWS()、INVSUBBYTES()、INVMIXCOLUMNS()、ADDROUNDKEY() で表され、5.3.1~5.3.4 節で述べます。

INVCIPHER() is described in the pseudocode in Alg. 3, where the array w denotes the key schedule, as described in Section 5.2.

INVCIPHER() を Alg. 3 の擬似コードで記述します。ここで、配列 w は 5.2 節で述べた鍵スケジュールを表します。

図表

図 6. 4 ≤ i < 44 のワード w[i] を生成する AES-128 の KEYEXPANSION()。ここで l は 0 から 36 までの 4 の倍数をとる。上段に 4 ワード wl, wl+1, wl+2, wl+3、下段に 4 ワード wl+4~wl+7 がある。wl+3 は右から左へ RotWord、SubWord、⊕Rcon を通り、wl との ⊕ で wl+4 になる。その結果と wl+1 との ⊕ で wl+5、その結果と wl+2 との ⊕ で wl+6、その結果と wl+3 との ⊕ で wl+7 が得られる。

Figure 6. KEYEXPANSION() of AES-128 to generate the words \(w[i]\) for \(4 \le i < 44\), where \(l\) ranges over the multiples of 4 between 0 and 36

図 6. \(4 \le i < 44\) のワード \(w[i]\) を生成する AES-128 の KEYEXPANSION()。ここで \(l\) は 0 から 36 までの 4 の倍数をとる

図表

図 7. 6 ≤ i < 52 のワード w[i] を生成する AES-192 の KEYEXPANSION()。ここで l は 0 から 42 までの 6 の倍数をとる。上段に 6 ワード wl~wl+5、下段に 6 ワード wl+6~wl+11 がある。wl+5 は右から左へ RotWord、SubWord、⊕Rcon を通り、wl との ⊕ で wl+6 になる。以降の各ワードは、直前の結果と上段の次のワードとの ⊕ である。wl+1 とで wl+7、wl+2 とで wl+8、wl+3 とで wl+9、wl+4 とで wl+10、wl+5 とで wl+11 が得られる。

Figure 7. KEYEXPANSION() of AES-192 to generate the words \(w[i]\) for \(6 \le i < 52\), where \(l\) ranges over the multiples of 6 between 0 and 42

図 7. \(6 \le i < 52\) のワード \(w[i]\) を生成する AES-192 の KEYEXPANSION()。ここで \(l\) は 0 から 42 までの 6 の倍数をとる

図表

図 8. 8 ≤ i < 60 のワード w[i] を生成する AES-256 の KEYEXPANSION()。ここで l は 0 から 48 までの 8 の倍数をとる。上段に 8 ワード wl~wl+7、下段に 8 ワード wl+8~wl+15 がある。wl+7 は右から左へ RotWord、SubWord、⊕Rcon を通り、wl との ⊕ で wl+8 になる。その結果と wl+1 との ⊕ で wl+9、wl+2 とで wl+10、wl+3 とで wl+11 が得られる。wl+11 は 2 つ目の SubWord を通って wl+4 との ⊕ で wl+12 になり、その結果と wl+5 とで wl+13、wl+6 とで wl+14、wl+7 とで wl+15 が得られる。

Figure 8. KEYEXPANSION() of AES-256 to generate the words \(w[i]\) for \(8 \le i < 60\), where \(l\) ranges over the multiples of 8 between 0 and 48

図 8. \(8 \le i < 60\) のワード \(w[i]\) を生成する AES-256 の KEYEXPANSION()。ここで \(l\) は 0 から 48 までの 8 の倍数をとる

Algorithm 3 Pseudocode for INVCIPHER()

Algorithm 3 INVCIPHER() の擬似コード

1: procedure INVCIPHER(in, Nr, w)
2:   state ← in ▷ See Sec. 3.4
3:   state ← ADDROUNDKEY(state, w[4 ∗ Nr..4 ∗ Nr + 3]) ▷ See Sec. 5.1.4
4:   for round from Nr − 1 downto 1 do
5:     state ← INVSHIFTROWS(state) ▷ See Sec. 5.3.1
6:     state ← INVSUBBYTES(state) ▷ See Sec. 5.3.2
7:     state ← ADDROUNDKEY(state, w[4 ∗ round..4 ∗ round + 3])
8:     state ← INVMIXCOLUMNS(state) ▷ See Sec. 5.3.3
9:   end for
10:   state ← INVSHIFTROWS(state)
11:   state ← INVSUBBYTES(state)
12:   state ← ADDROUNDKEY(state, w[0..3])
13:   return state
14: end procedure
原文のみ

5.3.1 INVSHIFTROWS()

5.3.1 INVSHIFTROWS()

INVSHIFTROWS() is the inverse of the SHIFTROWS(). In particular, the bytes in the last three rows of the state are cyclically shifted as follows:

INVSHIFTROWS() は SHIFTROWS() の逆変換です。具体的には、ステートの最後の 3 行のバイトを次のように巡回シフトします。

\[s'_{r,c} = s_{r,(c-r) \bmod 4} \qquad \text{for } 0 \le r < 4 \text{ and } 0 \le c < 4. \tag{5.12}\]
\[s'_{r,c} = s_{r,(c-r) \bmod 4} \qquad \text{for } 0 \le r < 4 \text{ and } 0 \le c < 4. \tag{5.12}\]

INVSHIFTROWS() is illustrated in Figure 9. In that representation of the state, the effect is to move each byte by \(r\) positions to the right in the row, cycling the right-most \(r\) bytes around to the left end of the row. The first row, where \(r = 0\), is unchanged.

INVSHIFTROWS() を図 9 に示します。このステートの表現では、各バイトを行内で右へ \(r\) 位置移動させ、右端の \(r\) バイトを行の左端へ巡回させる効果をもちます。\(r = 0\) である第 1 行は変化しません。

図表

図 9. INVSHIFTROWS() の図解。上部では、4 バイトの行 sr,0, sr,1, sr,2, sr,3 から、InvShiftRows() と記された箱を通る曲線の矢印が、行 s′r,0, s′r,1, s′r,2, s′r,3 へ向かう。下部では、左にステート s(s0,0~s3,3)、右に結果のステート s′ がある。s′ の第 0 行は変わらず(s0,0, s0,1, s0,2, s0,3)、第 1 行は s1,3, s1,0, s1,1, s1,2、第 2 行は s2,2, s2,3, s2,0, s2,1、第 3 行は s3,1, s3,2, s3,3, s3,0 である。2 つの配列の間には、第 1~3 行のそれぞれについて、4 マスのうち右端の 1、2、3 マスを網掛けし、右端から左端へ回り込む矢印を付けた小さな図記号がある。

Figure 9. Illustration of INVSHIFTROWS()

図 9. INVSHIFTROWS() の図解

5.3.2 INVSUBBYTES()

5.3.2 INVSUBBYTES()

INVSUBBYTES() is the inverse of SUBBYTES(), in which the inverse of SBOX(), denoted by INVSBOX(), is applied to each byte of the state. INVSBOX() is derived from Table 4 by switching the roles of inputs and outputs, as presented in Table 6:

INVSUBBYTES() は SUBBYTES() の逆変換であり、INVSBOX() で表される SBOX() の逆関数をステートの各バイトに適用します。INVSBOX() は、表 4 の入力と出力の役割を入れ替えることで導かれ、表 6 に示すとおりです。

Table 6. INVSBOX(): substitution values for the byte xy (in hexadecimal format)

表 6. INVSBOX():バイト xy に対する置換値(16 進形式)

y
x0123456789abcdef
052096ad53036a538bf40a39e81f3d7fb
17ce339829b2fff87348e4344c4dee9cb
2547b9432a6c2233dee4c950b42fac34e
3082ea16628d924b2765ba2496d8bd125
472f8f66486689816d4a45ccc5d65b692
56c704850fdedb9da5e154657a78d9d84
690d8ab008cbcd30af7e45805b8b34506
7d02c1e8fca3f0f02c1afbd0301138a6b
83a9111414f67dcea97f2cfcef0b4e673
996ac7422e7ad3585e2f937e81c75df6e
a47f11a711d29c5896fb7620eaa18be1b
bfc563e4bc6d279209adbc0fe78cd5af4
c1fdda8338807c731b11210592780ec5f
d60517fa919b54a0d2de57a9f93c99cef
ea0e03b4dae2af5b0c8ebbb3c83539961
f172b047eba77d626e169146355210c7d
y
x0123456789abcdef
052096ad53036a538bf40a39e81f3d7fb
17ce339829b2fff87348e4344c4dee9cb
2547b9432a6c2233dee4c950b42fac34e
3082ea16628d924b2765ba2496d8bd125
472f8f66486689816d4a45ccc5d65b692
56c704850fdedb9da5e154657a78d9d84
690d8ab008cbcd30af7e45805b8b34506
7d02c1e8fca3f0f02c1afbd0301138a6b
83a9111414f67dcea97f2cfcef0b4e673
996ac7422e7ad3585e2f937e81c75df6e
a47f11a711d29c5896fb7620eaa18be1b
bfc563e4bc6d279209adbc0fe78cd5af4
c1fdda8338807c731b11210592780ec5f
d60517fa919b54a0d2de57a9f93c99cef
ea0e03b4dae2af5b0c8ebbb3c83539961
f172b047eba77d626e169146355210c7d

5.3.3 INVMIXCOLUMNS()

5.3.3 INVMIXCOLUMNS()

INVMIXCOLUMNS() is the inverse of MIXCOLUMNS(). In particular, INVMIXCOLUMNS() multiplies each of the four columns of the state by a single fixed matrix, as described in Section 4.3, with its entries taken from the following word:

INVMIXCOLUMNS() は MIXCOLUMNS() の逆変換です。具体的には、INVMIXCOLUMNS() は、4.3 節で述べたとおり、ステートの 4 つの列のそれぞれに単一の固定行列を乗じます。この行列の成分は次のワードから取られます。

\[[a_0, a_1, a_2, a_3] = [\{\texttt{0e}\}, \{\texttt{09}\}, \{\texttt{0d}\}, \{\texttt{0b}\}]. \tag{5.13}\]
\[[a_0, a_1, a_2, a_3] = [\{\texttt{0e}\}, \{\texttt{09}\}, \{\texttt{0d}\}, \{\texttt{0b}\}]. \tag{5.13}\]

したがって、

\[\begin{bmatrix} s'_{0,c} \\ s'_{1,c} \\ s'_{2,c} \\ s'_{3,c} \end{bmatrix} = \begin{bmatrix} \texttt{0e} & \texttt{0b} & \texttt{0d} & \texttt{09} \\ \texttt{09} & \texttt{0e} & \texttt{0b} & \texttt{0d} \\ \texttt{0d} & \texttt{09} & \texttt{0e} & \texttt{0b} \\ \texttt{0b} & \texttt{0d} & \texttt{09} & \texttt{0e} \end{bmatrix} \begin{bmatrix} s_{0,c} \\ s_{1,c} \\ s_{2,c} \\ s_{3,c} \end{bmatrix} \quad \text{for } 0 \le c < 4. \tag{5.14}\]
\[\begin{bmatrix} s'_{0,c} \\ s'_{1,c} \\ s'_{2,c} \\ s'_{3,c} \end{bmatrix} = \begin{bmatrix} \texttt{0e} & \texttt{0b} & \texttt{0d} & \texttt{09} \\ \texttt{09} & \texttt{0e} & \texttt{0b} & \texttt{0d} \\ \texttt{0d} & \texttt{09} & \texttt{0e} & \texttt{0b} \\ \texttt{0b} & \texttt{0d} & \texttt{09} & \texttt{0e} \end{bmatrix} \begin{bmatrix} s_{0,c} \\ s_{1,c} \\ s_{2,c} \\ s_{3,c} \end{bmatrix} \quad \text{for } 0 \le c < 4. \tag{5.14}\]

As a result of this matrix multiplication, the four bytes in a column are replaced by the following:

この行列乗算の結果、列の 4 つのバイトは次のものに置き換えられます。

\[\begin{aligned} s'_{0,c} &= (\{\texttt{0e}\} \bullet s_{0,c}) \oplus (\{\texttt{0b}\} \bullet s_{1,c}) \oplus (\{\texttt{0d}\} \bullet s_{2,c}) \oplus (\{\texttt{09}\} \bullet s_{3,c}) \\ s'_{1,c} &= (\{\texttt{09}\} \bullet s_{0,c}) \oplus (\{\texttt{0e}\} \bullet s_{1,c}) \oplus (\{\texttt{0b}\} \bullet s_{2,c}) \oplus (\{\texttt{0d}\} \bullet s_{3,c}) \\ s'_{2,c} &= (\{\texttt{0d}\} \bullet s_{0,c}) \oplus (\{\texttt{09}\} \bullet s_{1,c}) \oplus (\{\texttt{0e}\} \bullet s_{2,c}) \oplus (\{\texttt{0b}\} \bullet s_{3,c}) \\ s'_{3,c} &= (\{\texttt{0b}\} \bullet s_{0,c}) \oplus (\{\texttt{0d}\} \bullet s_{1,c}) \oplus (\{\texttt{09}\} \bullet s_{2,c}) \oplus (\{\texttt{0e}\} \bullet s_{3,c}). \end{aligned} \tag{5.15}\]
\[\begin{aligned} s'_{0,c} &= (\{\texttt{0e}\} \bullet s_{0,c}) \oplus (\{\texttt{0b}\} \bullet s_{1,c}) \oplus (\{\texttt{0d}\} \bullet s_{2,c}) \oplus (\{\texttt{09}\} \bullet s_{3,c}) \\ s'_{1,c} &= (\{\texttt{09}\} \bullet s_{0,c}) \oplus (\{\texttt{0e}\} \bullet s_{1,c}) \oplus (\{\texttt{0b}\} \bullet s_{2,c}) \oplus (\{\texttt{0d}\} \bullet s_{3,c}) \\ s'_{2,c} &= (\{\texttt{0d}\} \bullet s_{0,c}) \oplus (\{\texttt{09}\} \bullet s_{1,c}) \oplus (\{\texttt{0e}\} \bullet s_{2,c}) \oplus (\{\texttt{0b}\} \bullet s_{3,c}) \\ s'_{3,c} &= (\{\texttt{0b}\} \bullet s_{0,c}) \oplus (\{\texttt{0d}\} \bullet s_{1,c}) \oplus (\{\texttt{09}\} \bullet s_{2,c}) \oplus (\{\texttt{0e}\} \bullet s_{3,c}). \end{aligned} \tag{5.15}\]

5.3.4 Inverse of ADDROUNDKEY()

5.3.4 ADDROUNDKEY()の逆変換

ADDROUNDKEY(), described in Section 5.1.4, is its own inverse.

5.1.4節で説明したADDROUNDKEY()は、それ自身が逆変換です。

5.3.5 EQINVCIPHER()

5.3.5 EQINVCIPHER()

Several properties of the AES algorithm allow for an alternative specification of the inverse of CIPHER(), called the equivalent inverse cipher, denoted by EQINVCIPHER(). In the specification of EQINVCIPHER(), the transformations of the round function of the cipher in Alg. 1 are directly replaced by their inverses in EQINVCIPHER(), in the same order. The efficiency of this structure in comparison to the specification of INVCIPHER() in Alg. 3 is explained in the Rijndael proposal document [2].

AESアルゴリズムのいくつかの性質により、CIPHER()の逆変換を別の形で規定することができます。これを等価逆暗号と呼び、EQINVCIPHER()で表します。EQINVCIPHER()の規定では、Alg. 1の暗号のラウンド関数を構成する各変換を、同じ順序のままそれぞれの逆変換に直接置き換えます。この構造がAlg. 3のINVCIPHER()の規定と比べて効率的である理由は、Rijndaelの提案文書[2]で説明されています。

The pseudocode for the equivalent inverse cipher, given in Alg. 4, uses a modified key schedule, denoted by the word array dw. The routine to generate dw is an extension of KEYEXPANSION(), denoted by KEYEXPANSIONEIC(), whose pseudocode is given in Alg. 5.

Alg. 4に示す等価逆暗号の擬似コードは、ワード配列dwで表す修正された鍵スケジュールを用います。dwを生成するルーチンはKEYEXPANSION()を拡張したものであり、KEYEXPANSIONEIC()で表します。その擬似コードをAlg. 5に示します。

Algorithm 4 Pseudocode for EQINVCIPHER()

Algorithm 4 EQINVCIPHER()の擬似コード

1: procedure EQINVCIPHER(in, Nr, dw)
2:   state ← in
3:   state ← ADDROUNDKEY(state, dw[4 ∗ Nr..4 ∗ Nr + 3])
4:   for round from Nr − 1 downto 1 do
5:     state ← INVSUBBYTES(state)
6:     state ← INVSHIFTROWS(state)
7:     state ← INVMIXCOLUMNS(state)
8:     state ← ADDROUNDKEY(state, dw[4 ∗ round..4 ∗ round + 3])
9:   end for
10:   state ← INVSUBBYTES(state)
11:   state ← INVSHIFTROWS(state)
12:   state ← ADDROUNDKEY(state, dw[0..3])
13:   return state
14: end procedure
原文のみ

Algorithm 5 Pseudocode for KEYEXPANSIONEIC()

Algorithm 5 KEYEXPANSIONEIC()の擬似コード

1: procedure KEYEXPANSIONEIC(key)
2:   i ← 0
3:   while i ≤ Nk − 1 do
4:     w[i] ← key[4i..4i + 3]
5:     dw[i] ← w[i]
6:     i ← i + 1
7:   end while ▷ When the loop concludes, i = Nk.
8:   while i ≤ 4 ∗ Nr + 3 do
9:     temp ← w[i − 1]
10:     if i mod Nk = 0 then
11:       temp ← SUBWORD(ROTWORD(temp)) ⊕ Rcon[i/Nk]
12:     else if Nk > 6 and i mod Nk = 4 then
13:       temp ← SUBWORD(temp)
14:     end if
15:     w[i] ← w[i − Nk] ⊕ temp
16:     dw[i] ← w[i]
17:     i ← i + 1
18:   end while
19:   for round from 1 to Nr − 1 do
20:     i ← 4 ∗ round
21:     dw[i..i + 3] ← INVMIXCOLUMNS(dw[i..i + 3]) ▷ Note change of type.
22:   end for
23:   return dw
24: end procedure
原文のみ

The first and last round keys in dw are the same as in w; the modification of the other round keys is described in Lines 19–22. The comment in Line 21 refers to the input to INVMIXCOLUMNS(): the one-dimensional array of words is converted to a two-dimensional array of bytes, as in Fig. 1.

dwの最初と最後のラウンド鍵はwと同じであり、それ以外のラウンド鍵の修正は19~22行目に記述されています。21行目のコメントはINVMIXCOLUMNS()への入力を指しています。すなわち、ワードの1次元配列を、図1と同様にバイトの2次元配列に変換します。

6. Implementation Considerations

6. 実装上の考慮事項

6.1 Key Length Requirements

6.1 鍵長の要件

An implementation of the AES algorithm shall support at least one of the three key lengths specified in Sec. 5: 128, 192, or 256 bits (i.e., Nk = 4, 6, or 8, respectively). Implementations may optionally support two or three key lengths, which may promote the interoperability of algorithm implementations.

AESアルゴリズムの実装は、Sec. 5で規定した三つの鍵長、すなわち128、192、256ビット(それぞれNk = 4、6、8)のうち、少なくとも一つをサポートしなければなりません。実装は、任意で二つまたは三つの鍵長をサポートしてもよいです。これにより、アルゴリズム実装間の相互運用性が高まる可能性があります。

6.2 Keying Restrictions

6.2 鍵に関する制限

When a cryptographic key has been generated appropriately (see NIST Special Publication 800-133, Rev. 2 [6] for guidelines), no restriction is imposed when the resulting key is used for the AES algorithm.

暗号鍵が適切に生成されている場合(指針についてはNIST Special Publication 800-133, Rev. 2 [6]を参照)、生成された鍵をAESアルゴリズムに用いることに制限は課されません。

6.3 Parameter Extensions

6.3 パラメータの拡張

In Table 3, this Standard explicitly defines the allowed values for the key length (Nk), block size (Nb), and number of rounds (Nr). However, future revisions of this Standard could include changes or additions to the allowed values for those parameters. Therefore, implementers may choose to design their AES implementations with future flexibility in mind.

本標準は、表3で鍵長(Nk)、ブロックサイズ(Nb)、ラウンド数(Nr)の許容値を明示的に定義しています。ただし、本標準の将来の改訂では、これらのパラメータの許容値が変更または追加される可能性があります。したがって、実装者は将来の柔軟性を念頭に置いてAES実装を設計することを選択してもよいです。

6.4 Implementation Suggestions Regarding Various Platforms

6.4 各種プラットフォームに関する実装上の提案

Implementation variations are possible that may, in many cases, offer performance or other advantages. Given the same input key and data (plaintext or ciphertext), any implementation that produces the same output (ciphertext or plaintext) as the algorithm specified in this Standard is an equivalent implementation of the AES algorithm.

多くの場合に性能その他の利点をもたらしうる実装上の変形が可能です。同じ入力鍵とデータ(平文または暗号文)が与えられたとき、本標準で規定するアルゴリズムと同じ出力(暗号文または平文)を生成する実装は、いずれもAESアルゴリズムの等価な実装です。

The AES proposal document [2] and other resources located on the AES page [7] include suggestions on how to efficiently implement the AES algorithm on a variety of platforms. Suggested implementations are intended to explain the inner workings of the AES algorithm but do not provide protection against various implementation attacks.

AESの提案文書[2]およびAESのページ[7]にあるその他の資料には、さまざまなプラットフォーム上でAESアルゴリズムを効率的に実装する方法に関する提案が含まれています。提案された実装はAESアルゴリズムの内部動作を説明することを目的としたものであり、各種の実装攻撃に対する保護を提供するものではありません。

A physical implementation may leak key-dependent information through side channels, such as the time taken to perform a computation, or when faults are injected into the computation. When such attacks are non-invasive, they can be effective even when there are mechanisms to detect physical tampering of the device. For example, cache-timing attacks may affect AES implementations on software platforms that use a cache to accelerate the access to data from main memory.

物理的な実装は、計算に要する時間などのサイドチャネルを通じて、あるいは計算にフォールトが注入されたときに、鍵に依存する情報を漏えいすることがあります。このような攻撃が非侵襲的である場合、デバイスへの物理的な改ざんを検知する仕組みがあっても有効となりうます。たとえば、主記憶からのデータアクセスを高速化するためにキャッシュを用いるソフトウェアプラットフォーム上のAES実装は、キャッシュタイミング攻撃の影響を受けることがあります。

Protecting implementations of the AES algorithm against implementation attacks where applicable should be considered. Such considerations are outside of the scope of this document but are taken into account when testing for conformance to the algorithm in this Standard according to the validation program developed by NIST (see https://nist.gov/cmvp).

該当する場合には、実装攻撃に対してAESアルゴリズムの実装を保護することを検討することが望まれます。このような検討事項は本文書の範囲外ですが、NISTが策定した検証プログラム(https://nist.gov/cmvp を参照)に従って本標準のアルゴリズムへの適合性を試験する際には考慮されます。

6.5 Modes of Operation

6.5 暗号利用モード

Block cipher modes of operation are cryptographic functions that feature a block cipher to provide information services, such as confidentiality and authentication. NIST-recommended modes of operation are specified in the 800-38 series of NIST Special Publications. Further information is available at https://csrc.nist.gov/Projects/block-cipher-techniques/BCM.

ブロック暗号の暗号利用モードは、ブロック暗号を用いて機密性や認証などの情報サービスを提供する暗号機能です。NISTが推奨する暗号利用モードは、NIST Special Publicationの800-38シリーズで規定されています。詳細な情報は https://csrc.nist.gov/Projects/block-cipher-techniques/BCM で入手できます。

References

参考文献

[1] James Nechvatal, Elaine Barker, Lawrence Bassham, William Burr, Morris Dworkin, James Foti, and Edward Roback. Report on the Development of the Advanced Encryption Standard (AES). Journal of Research of NIST (NIST JRES), May 2001. https://doi.org/10.6028/jres. 106.023.

[1] James Nechvatal, Elaine Barker, Lawrence Bassham, William Burr, Morris Dworkin, James Foti, and Edward Roback. Report on the Development of the Advanced Encryption Standard (AES). Journal of Research of NIST (NIST JRES), 2001年5月. https://doi.org/10.6028/jres. 106.023.

[2] Joan Daemen and Vincent Rijmen. AES Proposal: Rijndael Document Version 2. AES Algorithm Submission, September 1999. Available at https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/ documents/aes-development/rijndael-ammended.pdf.

[2] Joan Daemen and Vincent Rijmen. AES Proposal: Rijndael Document Version 2. AES Algorithm Submission, 1999年9月. https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/ documents/aes-development/rijndael-ammended.pdf で入手可能.

[3] Joan Daemen and Vincent Rijmen. The Design of Rijndael - The Advanced Encryption Standard (AES), Second Edition. Information Security and Cryptography. Springer, 2020. https://doi.org/10.1007/978-3-662-60769-5.

[3] Joan Daemen and Vincent Rijmen. The Design of Rijndael - The Advanced Encryption Standard (AES), Second Edition. Information Security and Cryptography. Springer, 2020. https://doi.org/10.1007/978-3-662-60769-5.

[4] Michael Artin. Algebra. Pearson Modern Classic. Pearson, second edition, 2017.

[4] Michael Artin. Algebra. Pearson Modern Classic. Pearson, second edition, 2017.

[5] Alfred J. Menezes, Scott A. Vanstone, and Paul C. Van Oorschot. Handbook of Applied Cryptography. CRC Press, Inc., USA, 1st edition, 1997. https://doi.org/10.1201/9780429466335.

[5] Alfred J. Menezes, Scott A. Vanstone, and Paul C. Van Oorschot. Handbook of Applied Cryptography. CRC Press, Inc., USA, 1st edition, 1997. https://doi.org/10.1201/9780429466335.

[6] Elaine Barker, Allen Roginsky, and Richard Davis. Recommendation for Cryptographic Key Generation. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-133, Rev. 2, June 2020. https://doi.org/10.6028/NIST.SP. 800-133r2.

[6] Elaine Barker, Allen Roginsky, and Richard Davis. Recommendation for Cryptographic Key Generation. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-133, Rev. 2, 2020年6月. https://doi.org/10.6028/NIST.SP. 800-133r2.

[7] National Institute of Standards and Technology. AES Development, 2022. Available at https://csrc.nist.gov/projects/aes.

[7] National Institute of Standards and Technology. AES Development, 2022. https://csrc.nist.gov/projects/aes で入手可能.

[8] National Institute of Standards and Technology. Cryptographic Standards and Guidelines: Examples with Intermediate Values, 2022. Available at https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values.

[8] National Institute of Standards and Technology. Cryptographic Standards and Guidelines: Examples with Intermediate Values, 2022. https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values で入手可能.

[9] National Institute of Standards and Technology. Crypto Publications Review Board, 2022. Available at https://csrc.nist.gov/projects/crypto-publication-review-project.

[9] National Institute of Standards and Technology. Crypto Publications Review Board, 2022. https://csrc.nist.gov/projects/crypto-publication-review-project で入手可能.

[10] Nicky Mouha. Review of the Advanced Encryption Standard. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Interagency Report (IR) 8319. https://doi.org/10.6028/NIST.IR.8319.

[10] Nicky Mouha. Review of the Advanced Encryption Standard. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Interagency Report (IR) 8319. https://doi.org/10.6028/NIST.IR.8319.

Appendix A — Key Expansion Examples

Appendix A — 鍵拡張の例

This appendix shows the development of the key schedule for each key size. Note that multi-byte values are presented using the notation described in Sec. 3. The intermediate values produced during the development of the key schedule (see Sec. 5.2) are given in the following table (all values are in hexadecimal format with the exception of the index column \(i\)).

この付録では、各鍵長について鍵スケジュールの生成過程を示します。複数バイトの値は、Sec. 3で説明した表記法で示すことに注意されました。鍵スケジュールの生成過程(Sec. 5.2を参照)で得られる中間値を次の表に示します(インデックス列\(i\)を除き、すべての値は16進形式です)。

A.1 Expansion of a 128-bit Key

A.1 128ビット鍵の拡張

This section contains the key expansion of the following key:

この節では、次の鍵の鍵拡張を示します。

Key = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c

鍵 = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c

for \(Nk = 4\), which results in

\(Nk = 4\)の場合、次のようになります。

\[w_0 = \mathtt{2b7e1516} \quad w_1 = \mathtt{28aed2a6} \quad w_2 = \mathtt{abf71588} \quad w_3 = \mathtt{09cf4f3c}\]
\[w_0 = \mathtt{2b7e1516} \quad w_1 = \mathtt{28aed2a6} \quad w_2 = \mathtt{abf71588} \quad w_3 = \mathtt{09cf4f3c}\]
i (dec)tempAfter ROTWORD()After SUBWORD()Rcon[i/Nk]After XOR with Rconw[i−Nk]w[i] = temp ⊕ w[i−Nk]
409cf4f3ccf4f3c098a84eb01010000008b84eb012b7e1516a0fafe17
5a0fafe1728aed2a688542cb1
688542cb1abf7158823a33939
723a3393909cf4f3c2a6c7605
82a6c76056c76052a50386be50200000052386be5a0fafe17f2c295f2
9f2c295f288542cb17a96b943
107a96b94323a339395935807a
115935807a2a6c76057359f67f
127359f67f59f67f73cb42d28f04000000cf42d28ff2c295f23d80477d
133d80477d7a96b9434716fe3e
144716fe3e5935807a1e237e44
151e237e447359f67f6d7a883b
166d7a883b7a883b6ddac4e23c08000000d2c4e23c3d80477def44a541
17ef44a5414716fe3ea8525b7f
18a8525b7f1e237e44b671253b
19b671253b6d7a883bdb0bad00
20db0bad000bad00db2b9563b9100000003b9563b9ef44a541d4d1c6f8
21d4d1c6f8a8525b7f7c839d87
227c839d87b671253bcaf2b8bc
23caf2b8bcdb0bad0011f915bc
i(10進)tempROTWORD()の後SUBWORD()の後Rcon[i/Nk]Rconとの排他的論理和の後w[i−Nk]w[i] = temp ⊕ w[i−Nk]
409cf4f3ccf4f3c098a84eb01010000008b84eb012b7e1516a0fafe17
5a0fafe1728aed2a688542cb1
688542cb1abf7158823a33939
723a3393909cf4f3c2a6c7605
82a6c76056c76052a50386be50200000052386be5a0fafe17f2c295f2
9f2c295f288542cb17a96b943
107a96b94323a339395935807a
115935807a2a6c76057359f67f
127359f67f59f67f73cb42d28f04000000cf42d28ff2c295f23d80477d
133d80477d7a96b9434716fe3e
144716fe3e5935807a1e237e44
151e237e447359f67f6d7a883b
166d7a883b7a883b6ddac4e23c08000000d2c4e23c3d80477def44a541
17ef44a5414716fe3ea8525b7f
18a8525b7f1e237e44b671253b
19b671253b6d7a883bdb0bad00
20db0bad000bad00db2b9563b9100000003b9563b9ef44a541d4d1c6f8
21d4d1c6f8a8525b7f7c839d87
227c839d87b671253bcaf2b8bc
23caf2b8bcdb0bad0011f915bc
2411f915bcf915bc119959658220000000b9596582d4d1c6f86d88a37a
256d88a37a7c839d87110b3efd
26110b3efdcaf2b8bcdbf98641
27dbf9864111f915bcca0093fd
28ca0093fd0093fdca63dc54744000000023dc54746d88a37a4e54f70e
294e54f70e110b3efd5f5fc9f3
305f5fc9f3dbf9864184a64fb2
3184a64fb2ca0093fd4ea6dc4f
324ea6dc4fa6dc4f4e2486842f80000000a486842f4e54f70eead27321
33ead273215f5fc9f3b58dbad2
34b58dbad284a64fb2312bf560
35312bf5604ea6dc4f7f8d292f
367f8d292f8d292f7f5da515d21b00000046a515d2ead27321ac7766f3
37ac7766f3b58dbad219fadc21
3819fadc21312bf56028d12941
3928d129417f8d292f575c006e
40575c006e5c006e574a639f5b360000007c639f5bac7766f3d014f9a8
41d014f9a819fadc21c9ee2589
42c9ee258928d12941e13f0cc8
43e13f0cc8575c006eb6630ca6
2411f915bcf915bc119959658220000000b9596582d4d1c6f86d88a37a
256d88a37a7c839d87110b3efd
26110b3efdcaf2b8bcdbf98641
27dbf9864111f915bcca0093fd
28ca0093fd0093fdca63dc54744000000023dc54746d88a37a4e54f70e
294e54f70e110b3efd5f5fc9f3
305f5fc9f3dbf9864184a64fb2
3184a64fb2ca0093fd4ea6dc4f
324ea6dc4fa6dc4f4e2486842f80000000a486842f4e54f70eead27321
33ead273215f5fc9f3b58dbad2
34b58dbad284a64fb2312bf560
35312bf5604ea6dc4f7f8d292f
367f8d292f8d292f7f5da515d21b00000046a515d2ead27321ac7766f3
37ac7766f3b58dbad219fadc21
3819fadc21312bf56028d12941
3928d129417f8d292f575c006e
40575c006e5c006e574a639f5b360000007c639f5bac7766f3d014f9a8
41d014f9a819fadc21c9ee2589
42c9ee258928d12941e13f0cc8
43e13f0cc8575c006eb6630ca6

A.2 Expansion of a 192-bit Key

A.2 192ビット鍵の拡張

This section contains the key expansion of the following key:

この節では、次の鍵の鍵拡張を示します。

Key = 8e 73 b0 f7 da 0e 64 52 c8 10 f3 2b 80 90 79 e5 62 f8 ea d2 52 2c 6b 7b

鍵 = 8e 73 b0 f7 da 0e 64 52 c8 10 f3 2b 80 90 79 e5 62 f8 ea d2 52 2c 6b 7b

for \(Nk = 6\), which results in

\(Nk = 6\)の場合、次のようになります。

\[\begin{array}{lll} w_0 = \mathtt{8e73b0f7} & w_1 = \mathtt{da0e6452} & w_2 = \mathtt{c810f32b} \\ w_3 = \mathtt{809079e5} & w_4 = \mathtt{62f8ead2} & w_5 = \mathtt{522c6b7b} \end{array}\]
\[\begin{array}{lll} w_0 = \mathtt{8e73b0f7} & w_1 = \mathtt{da0e6452} & w_2 = \mathtt{c810f32b} \\ w_3 = \mathtt{809079e5} & w_4 = \mathtt{62f8ead2} & w_5 = \mathtt{522c6b7b} \end{array}\]
i (dec)tempAfter ROTWORD()After SUBWORD()Rcon[i/Nk]After XOR with Rconw[i−Nk]w[i] = temp ⊕ w[i−Nk]
6522c6b7b2c6b7b52717f210001000000707f21008e73b0f7fe0c91f7
7fe0c91f7da0e64522402f5a5
82402f5a5c810f32bec12068e
i(10進)tempROTWORD()の後SUBWORD()の後Rcon[i/Nk]Rconとの排他的論理和の後w[i−Nk]w[i] = temp ⊕ w[i−Nk]
6522c6b7b2c6b7b52717f210001000000707f21008e73b0f7fe0c91f7
7fe0c91f7da0e64522402f5a5
82402f5a5c810f32bec12068e
9ec12068e809079e56c827f6b
106c827f6b62f8ead20e7a95b9
110e7a95b9522c6b7b5c56fec2
125c56fec256fec25cb1bb254a02000000b3bb254afe0c91f74db7b4bd
134db7b4bd2402f5a569b54118
1469b54118ec12068e85a74796
1585a747966c827f6be92538fd
16e92538fd0e7a95b9e75fad44
17e75fad445c56fec2bb095386
18bb095386095386bb01ed44ea0400000005ed44ea4db7b4bd485af057
19485af05769b5411821efb14f
2021efb14f85a74796a448f6d9
21a448f6d9e92538fd4d6dce24
224d6dce24e75fad44aa326360
23aa326360bb095386113b30e6
24113b30e63b30e611e2048e8208000000ea048e82485af057a25e7ed5
25a25e7ed521efb14f83b1cf9a
2683b1cf9aa448f6d927f93943
2727f939434d6dce246a94f767
286a94f767aa326360c0a69407
29c0a69407113b30e6d19da4e1
30d19da4e19da4e1d15e49f83e100000004e49f83ea25e7ed5ec1786eb
31ec1786eb83b1cf9a6fa64971
326fa6497127f93943485f7032
33485f70326a94f76722cb8755
3422cb8755c0a69407e26d1352
35e26d1352d19da4e133f0b7b3
3633f0b7b3f0b7b3338ca96dc320000000aca96dc3ec1786eb40beeb28
3740beeb286fa649712f18a259
382f18a259485f70326747d26b
396747d26b22cb8755458c553e
40458c553ee26d1352a7e1466c
41a7e1466c33f0b7b39411f1df
429411f1df11f1df9482a19e2240000000c2a19e2240beeb28821f750a
43821f750a2f18a259ad07d753
9ec12068e809079e56c827f6b
106c827f6b62f8ead20e7a95b9
110e7a95b9522c6b7b5c56fec2
125c56fec256fec25cb1bb254a02000000b3bb254afe0c91f74db7b4bd
134db7b4bd2402f5a569b54118
1469b54118ec12068e85a74796
1585a747966c827f6be92538fd
16e92538fd0e7a95b9e75fad44
17e75fad445c56fec2bb095386
18bb095386095386bb01ed44ea0400000005ed44ea4db7b4bd485af057
19485af05769b5411821efb14f
2021efb14f85a74796a448f6d9
21a448f6d9e92538fd4d6dce24
224d6dce24e75fad44aa326360
23aa326360bb095386113b30e6
24113b30e63b30e611e2048e8208000000ea048e82485af057a25e7ed5
25a25e7ed521efb14f83b1cf9a
2683b1cf9aa448f6d927f93943
2727f939434d6dce246a94f767
286a94f767aa326360c0a69407
29c0a69407113b30e6d19da4e1
30d19da4e19da4e1d15e49f83e100000004e49f83ea25e7ed5ec1786eb
31ec1786eb83b1cf9a6fa64971
326fa6497127f93943485f7032
33485f70326a94f76722cb8755
3422cb8755c0a69407e26d1352
35e26d1352d19da4e133f0b7b3
3633f0b7b3f0b7b3338ca96dc320000000aca96dc3ec1786eb40beeb28
3740beeb286fa649712f18a259
382f18a259485f70326747d26b
396747d26b22cb8755458c553e
40458c553ee26d1352a7e1466c
41a7e1466c33f0b7b39411f1df
429411f1df11f1df9482a19e2240000000c2a19e2240beeb28821f750a
43821f750a2f18a259ad07d753
44ad07d7536747d26bca400538
45ca400538458c553e8fcc5006
468fcc5006a7e1466c282d166a
47282d166a9411f1dfbc3ce7b5
48bc3ce7b53ce7b5bceb94d565800000006b94d565821f750ae98ba06f
49e98ba06fad07d753448c773c
50448c773cca4005388ecc7204
518ecc72048fcc500601002202
44ad07d7536747d26bca400538
45ca400538458c553e8fcc5006
468fcc5006a7e1466c282d166a
47282d166a9411f1dfbc3ce7b5
48bc3ce7b53ce7b5bceb94d565800000006b94d565821f750ae98ba06f
49e98ba06fad07d753448c773c
50448c773cca4005388ecc7204
518ecc72048fcc500601002202

A.3 Expansion of a 256-bit Key

A.3 256ビット鍵の拡張

This section contains the key expansion of the following key:

本節では、次の鍵の鍵拡張を示します。

Key = 60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81 1f 35 2c 07 3b 61 08 d7 2d 98 10 a3 09 14 df f4

Key = 60 3d eb 10 15 ca 71 be 2b 73 ae f0 85 7d 77 81 1f 35 2c 07 3b 61 08 d7 2d 98 10 a3 09 14 df f4

for \(Nk = 8\), which results in

\(Nk = 8\) の場合、その結果は次のとおりです。

\[\begin{array}{llll} w_0 = \mathtt{603deb10} & w_1 = \mathtt{15ca71be} & w_2 = \mathtt{2b73aef0} & w_3 = \mathtt{857d7781} \\ w_4 = \mathtt{1f352c07} & w_5 = \mathtt{3b6108d7} & w_6 = \mathtt{2d9810a3} & w_7 = \mathtt{0914dff4} \end{array}\]
\[\begin{array}{llll} w_0 = \mathtt{603deb10} & w_1 = \mathtt{15ca71be} & w_2 = \mathtt{2b73aef0} & w_3 = \mathtt{857d7781} \\ w_4 = \mathtt{1f352c07} & w_5 = \mathtt{3b6108d7} & w_6 = \mathtt{2d9810a3} & w_7 = \mathtt{0914dff4} \end{array}\]
i (dec)tempAfter ROTWORD()After SUBWORD()Rcon[i/Nk]After XOR with Rconw[i−Nk]w[i] = temp ⊕ w[i−Nk]
80914dff414dff409fa9ebf0101000000fb9ebf01603deb109ba35411
99ba3541115ca71be8e6925af
108e6925af2b73aef0a51a8b5f
11a51a8b5f857d77812067fcde
122067fcdeb785b01d1f352c07a8b09c1a
13a8b09c1a3b6108d793d194cd
1493d194cd2d9810a3be49846e
15be49846e0914dff4b75d5b9a
16b75d5b9a5d5b9ab74c39b8a9020000004e39b8a99ba35411d59aecb8
17d59aecb88e6925af5bf3c917
185bf3c917a51a8b5ffee94248
19fee942482067fcdede8ebe96
20de8ebe961d19ae90a8b09c1ab5a9328a
21b5a9328a93d194cd2678a647
222678a647be49846e98312229
i(10進)tempROTWORD() 適用後SUBWORD() 適用後Rcon[i/Nk]Rcon との排他的論理和の後w[i−Nk]w[i] = temp ⊕ w[i−Nk]
80914dff414dff409fa9ebf0101000000fb9ebf01603deb109ba35411
99ba3541115ca71be8e6925af
108e6925af2b73aef0a51a8b5f
11a51a8b5f857d77812067fcde
122067fcdeb785b01d1f352c07a8b09c1a
13a8b09c1a3b6108d793d194cd
1493d194cd2d9810a3be49846e
15be49846e0914dff4b75d5b9a
16b75d5b9a5d5b9ab74c39b8a9020000004e39b8a99ba35411d59aecb8
17d59aecb88e6925af5bf3c917
185bf3c917a51a8b5ffee94248
19fee942482067fcdede8ebe96
20de8ebe961d19ae90a8b09c1ab5a9328a
21b5a9328a93d194cd2678a647
222678a647be49846e98312229
2398312229b75d5b9a2f6c79b3
242f6c79b36c79b32f50b66d150400000054b66d15d59aecb8812c81ad
25812c81ad5bf3c917dadf48ba
26dadf48bafee9424824360af2
2724360af2de8ebe96fab8b464
28fab8b4642d6c8d43b5a9328a98c5bfc9
2998c5bfc92678a647bebd198e
30bebd198e98312229268c3ba7
31268c3ba72f6c79b309e04214
3209e04214e0421409e12cfa0108000000e92cfa01812c81ad68007bac
3368007bacdadf48bab2df3316
34b2df331624360af296e939e4
3596e939e4fab8b4646c518d80
366c518d8050d15dcd98c5bfc9c814e204
37c814e204bebd198e76a9fb8a
3876a9fb8a268c3ba75025c02d
395025c02d09e0421459c58239
4059c58239c5823959a61312cb10000000b61312cb68007bacde136967
41de136967b2df33166ccc5a71
426ccc5a7196e939e4fa256395
43fa2563956c518d809674ee15
449674ee1590922859c814e2045886ca5d
455886ca5d76a9fb8a2e2f31d7
462e2f31d75025c02d7e0af1fa
477e0af1fa59c5823927cf73c3
4827cf73c3cf73c3278a8f2ecc20000000aa8f2eccde136967749c47ab
49749c47ab6ccc5a7118501dda
5018501ddafa256395e2757e4f
51e2757e4f9674ee157401905a
527401905a927c60be5886ca5dcafaaae3
53cafaaae32e2f31d7e4d59b34
54e4d59b347e0af1fa9adf6ace
559adf6ace27cf73c3bd10190d
56bd10190d10190dbdcad4d77a400000008ad4d77a749c47abfe4890d1
57fe4890d118501ddae6188d0b
58e6188d0be2757e4f046df344
59046df3447401905a706c631e
2398312229b75d5b9a2f6c79b3
242f6c79b36c79b32f50b66d150400000054b66d15d59aecb8812c81ad
25812c81ad5bf3c917dadf48ba
26dadf48bafee9424824360af2
2724360af2de8ebe96fab8b464
28fab8b4642d6c8d43b5a9328a98c5bfc9
2998c5bfc92678a647bebd198e
30bebd198e98312229268c3ba7
31268c3ba72f6c79b309e04214
3209e04214e0421409e12cfa0108000000e92cfa01812c81ad68007bac
3368007bacdadf48bab2df3316
34b2df331624360af296e939e4
3596e939e4fab8b4646c518d80
366c518d8050d15dcd98c5bfc9c814e204
37c814e204bebd198e76a9fb8a
3876a9fb8a268c3ba75025c02d
395025c02d09e0421459c58239
4059c58239c5823959a61312cb10000000b61312cb68007bacde136967
41de136967b2df33166ccc5a71
426ccc5a7196e939e4fa256395
43fa2563956c518d809674ee15
449674ee1590922859c814e2045886ca5d
455886ca5d76a9fb8a2e2f31d7
462e2f31d75025c02d7e0af1fa
477e0af1fa59c5823927cf73c3
4827cf73c3cf73c3278a8f2ecc20000000aa8f2eccde136967749c47ab
49749c47ab6ccc5a7118501dda
5018501ddafa256395e2757e4f
51e2757e4f9674ee157401905a
527401905a927c60be5886ca5dcafaaae3
53cafaaae32e2f31d7e4d59b34
54e4d59b347e0af1fa9adf6ace
559adf6ace27cf73c3bd10190d
56bd10190d10190dbdcad4d77a400000008ad4d77a749c47abfe4890d1
57fe4890d118501ddae6188d0b
58e6188d0be2757e4f046df344
59046df3447401905a706c631e

Appendix B — Cipher Example

付録 B — 暗号化の例

The following diagram shows the values in the state array as the cipher progresses for a block length and a key length of 16 bytes each (i.e., \(Nb = 4\) and \(Nk = 4\)).

次の図は、ブロック長と鍵長がいずれも16バイト(すなわち \(Nb = 4\) かつ \(Nk = 4\))の場合に、暗号処理の進行に伴うステート配列の値を示したものです。

Input = 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34
Key   = 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c
原文のみ

The Round Key values are taken from the Key Expansion example in Appendix A.1.

ラウンド鍵の値は、付録 A.1 の鍵拡張の例から取っています。

Round NumberStart of RoundAfter SubBytesAfter ShiftRowsAfter MixColumnsRound Key Value
input32 88 31 e02b 28 ab 09
43 5a 31 377e ae f7 cf
f6 30 98 0715 d2 15 4f
a8 8d a2 3416 a6 88 3c
119 a0 9a e9d4 e0 b8 1ed4 e0 b8 1e04 e0 48 28a0 88 23 2a
3d f4 c6 f827 bf b4 41bf b4 41 2766 cb f8 06fa 54 a3 6c
e3 e2 8d 4811 98 5d 525d 52 11 9881 19 d3 26fe 2c 39 76
be 2b 2a 08ae f1 e5 3030 ae f1 e5e5 9a 7a 4c17 b1 39 05
2a4 68 6b 0249 45 7f 7749 45 7f 7758 1b db 1bf2 7a 59 73
9c 9f 5b 6ade db 39 02db 39 02 de4d 4b e7 6bc2 96 35 59
7f 35 ea 50d2 96 87 5387 53 d2 96ca 5a ca b095 b9 80 f6
f2 2b 43 4989 f1 1a 3b3b 89 f1 1af1 ac a8 e5f2 43 7a 7f
3aa 61 82 68ac ef 13 45ac ef 13 4575 20 53 bb3d 47 1e 6d
8f dd d2 3273 c1 b5 23c1 b5 23 73ec 0b c0 2580 16 23 7a
5f e3 4a 46cf 11 d6 5ad6 5a cf 1109 63 cf d047 fe 7e 88
03 ef d2 9a7b df b5 b8b8 7b df b593 33 7c dc7d 3e 44 3b
448 67 4d d652 85 e3 f652 85 e3 f60f 60 6f 5eef a8 b6 db
6c 1d e3 5f50 a4 11 cfa4 11 cf 50d6 31 c0 b344 52 71 0b
4e 9d b1 582f 5e c8 6ac8 6a 2f 5eda 38 10 13a5 5b 25 ad
ee 0d 38 e728 d7 07 9494 28 d7 07a9 bf 6b 0141 7f 3b 00
5e0 c8 d9 85e1 e8 35 97e1 e8 35 9725 bd b6 4cd4 7c ca 11
92 63 b1 b84f fb c8 6cfb c8 6c 4fd1 11 3a 4cd1 83 f2 f9
7f 63 35 bed2 fb 96 ae96 ae d2 fba9 d1 33 c0c6 9d b8 15
e8 c0 50 019b ba 53 7c7c 9b ba 53ad 68 8e b0f8 87 bc bc
ラウンド番号ラウンド開始時SubBytes 適用後ShiftRows 適用後MixColumns 適用後ラウンド鍵の値
入力32 88 31 e02b 28 ab 09
43 5a 31 377e ae f7 cf
f6 30 98 0715 d2 15 4f
a8 8d a2 3416 a6 88 3c
119 a0 9a e9d4 e0 b8 1ed4 e0 b8 1e04 e0 48 28a0 88 23 2a
3d f4 c6 f827 bf b4 41bf b4 41 2766 cb f8 06fa 54 a3 6c
e3 e2 8d 4811 98 5d 525d 52 11 9881 19 d3 26fe 2c 39 76
be 2b 2a 08ae f1 e5 3030 ae f1 e5e5 9a 7a 4c17 b1 39 05
2a4 68 6b 0249 45 7f 7749 45 7f 7758 1b db 1bf2 7a 59 73
9c 9f 5b 6ade db 39 02db 39 02 de4d 4b e7 6bc2 96 35 59
7f 35 ea 50d2 96 87 5387 53 d2 96ca 5a ca b095 b9 80 f6
f2 2b 43 4989 f1 1a 3b3b 89 f1 1af1 ac a8 e5f2 43 7a 7f
3aa 61 82 68ac ef 13 45ac ef 13 4575 20 53 bb3d 47 1e 6d
8f dd d2 3273 c1 b5 23c1 b5 23 73ec 0b c0 2580 16 23 7a
5f e3 4a 46cf 11 d6 5ad6 5a cf 1109 63 cf d047 fe 7e 88
03 ef d2 9a7b df b5 b8b8 7b df b593 33 7c dc7d 3e 44 3b
448 67 4d d652 85 e3 f652 85 e3 f60f 60 6f 5eef a8 b6 db
6c 1d e3 5f50 a4 11 cfa4 11 cf 50d6 31 c0 b344 52 71 0b
4e 9d b1 582f 5e c8 6ac8 6a 2f 5eda 38 10 13a5 5b 25 ad
ee 0d 38 e728 d7 07 9494 28 d7 07a9 bf 6b 0141 7f 3b 00
5e0 c8 d9 85e1 e8 35 97e1 e8 35 9725 bd b6 4cd4 7c ca 11
92 63 b1 b84f fb c8 6cfb c8 6c 4fd1 11 3a 4cd1 83 f2 f9
7f 63 35 bed2 fb 96 ae96 ae d2 fba9 d1 33 c0c6 9d b8 15
e8 c0 50 019b ba 53 7c7c 9b ba 53ad 68 8e b0f8 87 bc bc
6f1 c1 7c 5da1 78 10 4ca1 78 10 4c4b 2c 33 376d 11 db ca
00 92 c8 b563 4f e8 d54f e8 d5 6386 4a 9d d288 0b f9 00
6f 4c 8b d5a8 29 3d 033d 03 a8 298d 89 f4 18a3 3e 86 93
55 ef 32 0cfc df 23 fefe fc df 236d 80 e8 d87a fd 41 fd
726 3d e8 fdf7 27 9b 54f7 27 9b 5414 46 27 344e 5f 84 4e
0e 41 64 d2ab 83 43 b583 43 b5 ab15 16 46 2a54 5f a6 a6
2e b7 72 8b31 a9 40 3d40 3d 31 a9b5 15 56 d8f7 c9 4f dc
17 7d a9 25f0 ff d3 3f3f f0 ff d3bf ec d7 430e f3 b2 4f
85a 19 a3 7abe d4 0a dabe d4 0a da00 b1 54 faea b5 31 7f
41 49 e0 8c83 3b e1 643b e1 64 8351 c8 76 1bd2 8d 2b 8d
42 dc 19 042c 86 d4 f2d4 f2 2c 862f 89 6d 9973 ba f5 29
b1 1f 65 0cc8 c0 4d fefe c8 c0 4dd1 ff cd ea21 d2 60 2f
9ea 04 65 8587 f2 4d 9787 f2 4d 9747 40 a3 4cac 19 28 57
83 45 5d 96ec 6e 4c 906e 4c 90 ec37 d4 70 9f77 fa d1 5c
5c 33 98 b04a c3 46 e746 e7 4a c394 e4 3a 4266 dc 29 00
f0 2d ad c58c d8 95 a6a6 8c d8 95ed a5 a6 bcf3 21 41 6e
10eb 59 8b 1be9 cb 3d afe9 cb 3d afd0 c9 e1 b6
40 2e a1 c309 31 32 2e31 32 2e 0914 ee 3f 63
f2 38 13 4289 07 7d 2c7d 2c 89 07f9 25 0c 0c
1e 84 e7 d272 5f 94 b5b5 72 5f 94a8 89 c8 a6
output39 02 dc 19
25 dc 11 6a
84 09 85 0b
1d fb 97 32
6f1 c1 7c 5da1 78 10 4ca1 78 10 4c4b 2c 33 376d 11 db ca
00 92 c8 b563 4f e8 d54f e8 d5 6386 4a 9d d288 0b f9 00
6f 4c 8b d5a8 29 3d 033d 03 a8 298d 89 f4 18a3 3e 86 93
55 ef 32 0cfc df 23 fefe fc df 236d 80 e8 d87a fd 41 fd
726 3d e8 fdf7 27 9b 54f7 27 9b 5414 46 27 344e 5f 84 4e
0e 41 64 d2ab 83 43 b583 43 b5 ab15 16 46 2a54 5f a6 a6
2e b7 72 8b31 a9 40 3d40 3d 31 a9b5 15 56 d8f7 c9 4f dc
17 7d a9 25f0 ff d3 3f3f f0 ff d3bf ec d7 430e f3 b2 4f
85a 19 a3 7abe d4 0a dabe d4 0a da00 b1 54 faea b5 31 7f
41 49 e0 8c83 3b e1 643b e1 64 8351 c8 76 1bd2 8d 2b 8d
42 dc 19 042c 86 d4 f2d4 f2 2c 862f 89 6d 9973 ba f5 29
b1 1f 65 0cc8 c0 4d fefe c8 c0 4dd1 ff cd ea21 d2 60 2f
9ea 04 65 8587 f2 4d 9787 f2 4d 9747 40 a3 4cac 19 28 57
83 45 5d 96ec 6e 4c 906e 4c 90 ec37 d4 70 9f77 fa d1 5c
5c 33 98 b04a c3 46 e746 e7 4a c394 e4 3a 4266 dc 29 00
f0 2d ad c58c d8 95 a6a6 8c d8 95ed a5 a6 bcf3 21 41 6e
10eb 59 8b 1be9 cb 3d afe9 cb 3d afd0 c9 e1 b6
40 2e a1 c309 31 32 2e31 32 2e 0914 ee 3f 63
f2 38 13 4289 07 7d 2c7d 2c 89 07f9 25 0c 0c
1e 84 e7 d272 5f 94 b5b5 72 5f 94a8 89 c8 a6
出力39 02 dc 19
25 dc 11 6a
84 09 85 0b
1d fb 97 32

Appendix C — Example Vectors

付録C — 例示ベクトル

The NIST Computer Security Resource Center provides a website with “examples with intermediate values” for AES [8].

NISTのComputer Security Resource Centerは、AESの「中間値付きの例」を掲載したWebサイトを提供しています[8]。

Appendix D — Change Log (Informative)

付録D — 変更履歴(参考)

The original FIPS 197 (November 26, 2001) was reviewed and updated under the auspices of NIST’s Crypto Publication Review Board [9]. Public comments and analyses of the security of the AES that are described in NIST IR 8319 [10] were the basis for the decision to maintain the technical specifications of the Standard.

当初のFIPS 197(2001年11月26日)は、NISTのCrypto Publication Review Board [9]の主導のもとでレビューされ、更新されました。本標準の技術仕様を維持するという決定は、NIST IR 8319 [10]に記載されたパブリックコメントとAESの安全性に関する分析に基づいています。

The following is a summary of the editorial changes to the original FIPS 197 in the May 9, 2023 update, NIST FIPS 197-upd1:

2023年5月9日の更新版NIST FIPS 197-upd1において当初のFIPS 197に加えた編集上の変更の概要を以下に示します。

1.The formatting of many elements of the publication was improved, and the text was revised for clarity.

1.本文書の多くの要素の書式を改善し、明確にするために本文を改訂しました。

2.The following items were added to the front matter: title page, foreword, abstract, and keywords. Officials’ names and affiliations on the title page reflect the original publication.

2.前付けに、表紙、序文、要旨、キーワードを追加しました。表紙に記載した担当官の氏名と所属は、当初の発行時のものです。

3.The announcement sections were updated to refect current statutes, regulations, standards, guidelines, and validation programs.

3.告示の各節を、現行の法令、規則、標準、ガイドライン、検証プログラムを反映するように更新しました。

4.Section 1 was revised to 1) add and update references to the AES development effort and 2) explicitly name AES-128, AES-192, and AES-256.

4.第1節を改訂し、1) AES開発の取り組みへの参照を追加・更新し、2) AES-128、AES-192、AES-256を明示的に名指ししました。

5.The material in the previous Section 2.2 (Algorithm Parameters, Symbols and Functions) was split into two new sections: 2.2 (List of Functions) and 2.3 (Algorithm Parameters and Symbols).

5.旧2.2節(アルゴリズムのパラメータ、記号、関数)の内容を、2.2節(関数の一覧)と2.3節(アルゴリズムのパラメータと記号)の2つの新しい節に分割しました。

6.The terms, functions, and symbols from the specifications are comprehensively included in the lists in Sections 2.1–2.3.

6.仕様に現れる用語、関数、記号を、2.1~2.3節の一覧にすべて含めました。

7.The description of the indexing convention was removed from Section 3.1.

7.3.1節から添字付けの規約に関する記述を削除しました。

8.Table 1 was revised, and the text in the previous Section 3.2 on the polynomial interpretation of bytes was revised and moved to Section 4.

8.表1を改訂し、旧3.2節にあったバイトの多項式としての解釈に関する本文を改訂して第4節に移しました。

9.A general definition of the indexing of byte sequences was added to Section 3.3 before specializing to the example of a block, and Table 2 was revised.

9.3.3節に、ブロックの例に特化する前に、バイト列の添字付けの一般的な定義を追加し、表2を改訂しました。

10.The heading for Section 3.5 was changed to focus on word arrays, and notation for them was included in the text. The column words of the state were presented in a vertical format, with an improved description of the indices.

10.3.5節の見出しをワード配列に焦点を当てたものに変更し、その表記を本文に含めました。ステートの列ワードを縦方向の形式で示し、添字の説明を改善しました。

11.A reference for additional information on finite fields [4] was included in a footnote within Section 4, and the headings for Sections 4.1 and 4.2 were revised to explicitly mention \(\mathrm{GF}(2^8)\).

11.第4節の脚注に有限体に関する追加情報の参考文献[4]を加え、4.1節と4.2節の見出しを\(\mathrm{GF}(2^8)\)に明示的に言及するように改訂しました。

12.Section 4.2 was revised to provide an explicit, general description of finite field multiplication. The previous Section 4.2.1 was incorporated into the revised Section 4.2 by replacing the original example of modular polynomial reduction with an illustration of finite field multiplication using xtime.

12.4.2節を改訂し、有限体の乗算について明示的かつ一般的な説明を与えました。旧4.2.1節は改訂後の4.2節に統合し、当初の多項式の剰余による簡約の例を、xtimeを用いた有限体の乗算の例示に置き換えました。

13.The heading of Section 4.3 was revised to focus on multiplication by a fixed matrix, and the text of the section was simplified by removing the secondary interpretation as polynomial reduction. The descriptions of MIXCOLUMNS() and INVMIXCOLUMNS() in Sections 5.1.3 and 5.3.3 were revised accordingly, to refer back to this construction.

13.4.3節の見出しを固定行列による乗算に焦点を当てたものに改訂し、多項式の簡約としての副次的な解釈を削除して本節の本文を簡潔にしました。これに合わせて、5.1.3節と5.3.3節のMIXCOLUMNS()とINVMIXCOLUMNS()の説明を、この構成を参照するように改訂しました。

14.The text on multiplicative inverses in \(\mathrm{GF}(2^8)\) from the previous Section 4.2 was revised and moved to the new Section 4.4.

14.旧4.2節にあった\(\mathrm{GF}(2^8)\)における乗法逆元に関する本文を改訂し、新設の4.4節に移しました。

15.The discussion of the algorithm specifications in Section 5 was expanded to elaborate on the relationships among its components. A new brief explanation of Nb as a Rijndael parameter enabled the replacement of Nb with its constant value 4 in the rest of the Standard.

15.第5節のアルゴリズム仕様の説明を拡充し、構成要素間の関係を詳しく述べました。Rijndaelのパラメータとしての Nb について簡潔な説明を新たに加えたことで、本標準の残りの部分では Nb をその定数値4に置き換えました。

16.The pseudocode for the cipher, the key expansion routine, and the inverse cipher in Sections 5.1, 5.2, and 5.3 was reformatted, and some of the text in these sections was revised for clarity.

16.5.1節、5.2節、5.3節の暗号、鍵拡張ルーチン、逆暗号の擬似コードの書式を改め、これらの節の本文の一部を明確にするために改訂しました。

17.The descriptions of SHIFTROWS() in Section 5.1.2 and INVSHIFTROWS() in Section 5.3.2 were improved, and a mistake in the latter was corrected.

17.5.1.2節のSHIFTROWS()と5.3.2節のINVSHIFTROWS()の説明を改善し、後者の誤りを訂正しました。

18.Illustrations of the three instances of KEYEXPANSION() in the new Figs. 6, 7, and 8 were added to Section 5.2. The text in the section was also revised, including an explicit display of the round constants in the new Fig. 5.

18.5.2節に、KEYEXPANSION()の3つのインスタンスを図示した新しい図6、図7、図8を追加しました。また、新しい図5でラウンド定数を明示的に示すなど、同節の本文も改訂しました。

19.A separate algorithm for the modified key expansion routine for the equivalent inverse cipher was added to Section 5.3.5 instead of only the supplementary lines. The description of the equivalent inverse cipher was simplified in favor of the citation of an updated reference [3].

19.5.3.5節に、補足の行のみを示すのではなく、等価逆暗号のための修正版鍵拡張ルーチンを独立したアルゴリズムとして追加しました。等価逆暗号の説明は、更新された参考文献[3]を引用する形に簡略化しました。

20.Section 6.2 was revised to include a reference to NIST Special Publication 800-133, Rev. 2 [6].

20.6.2節を改訂し、NIST Special Publication 800-133, Rev. 2 [6]への参照を含めました。

21.Section 6.4 was revised to expand the discussion of implementation attacks.

21.6.4節を改訂し、実装攻撃に関する議論を拡充しました。

22.The References section is no longer labeled as an appendix. The references were updated to replace withdrawn publications and correct citation information and URLs.

22.参考文献の節は付録として位置づけないことにしました。廃止された文献を置き換え、引用情報とURLを訂正するために参考文献を更新しました。

23.The examples in Appendix C were removed in favor of a reference to the detailed example vectors that are now maintained at [8].

23.付録Cの例を削除し、代わりに現在[8]で維持されている詳細な例示ベクトルへの参照を示しました。

24.Appendix D was created to summarize the changes in this update to FIPS 197.

24.今回のFIPS 197の更新における変更点をまとめるために付録Dを新設しました。