Rijndaelとは? わかりやすく解説

Rijndael クラス

Rijndael 対称暗号アルゴリズムすべての実装継承元となる基本クラス表します

名前空間: System.Security.Cryptography
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<ComVisibleAttribute(True)> _
Public MustInherit Class
 Rijndael
    Inherits SymmetricAlgorithm
[ComVisibleAttribute(true)] 
public abstract class Rijndael : SymmetricAlgorithm
[ComVisibleAttribute(true)] 
public ref class Rijndael abstract : public
 SymmetricAlgorithm
/** @attribute ComVisibleAttribute(true) */ 
public abstract class Rijndael extends SymmetricAlgorithm
ComVisibleAttribute(true) 
public abstract class Rijndael extends
 SymmetricAlgorithm
解説解説
使用例使用例

Rijndael クラス使用してデータ暗号化し、復号化する方法次のコード例示します

Imports System.Security.Cryptography
Imports System.Text
Imports System.IO

Module RijndaelSample

    Sub Main()
        Try
            ' Create a new Rijndael object to generate a key
            ' and initialization vector (IV).
            Dim RijndaelAlg As Rijndael = Rijndael.Create

            ' Create a string to encrypt.
            Dim sData As String
 = "Here is some data to encrypt."
            Dim FileName As String
 = "CText.txt"

            ' Encrypt text to a file using the file name, key, and IV.
            EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV)

            ' Decrypt the text from a file using the file name, key,
 and IV.
            Dim Final As String
 = DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV)

            ' Display the decrypted string to the console.
            Console.WriteLine(Final)
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

        Console.ReadLine()

    End Sub


    Sub EncryptTextToFile(ByVal Data As
 String, ByVal FileName As
 String, ByVal Key() As Byte, ByVal IV() As Byte)
        Try
            ' Create or open the specified file.
            Dim fStream As FileStream = File.Open(FileName,
 FileMode.OpenOrCreate)

            ' Create a new Rijndael object.
            Dim RijndaelAlg As Rijndael = Rijndael.Create

            ' Create a CryptoStream using the FileStream 
            ' and the passed key and initialization vector (IV).
            Dim cStream As New
 CryptoStream(fStream, _
                                           RijndaelAlg.CreateEncryptor(Key, IV),
 _
                                           CryptoStreamMode.Write)

            ' Create a StreamWriter using the CryptoStream.
            Dim sWriter As New
 StreamWriter(cStream)

            Try

                ' Write the data to the stream 
                ' to encrypt it.
                sWriter.WriteLine(Data)
            Catch e As Exception

                Console.WriteLine("An error occurred: {0}",
 e.Message)

            Finally

                ' Close the streams and
                ' close the file.
                sWriter.Close()
                cStream.Close()
                fStream.Close()

            End Try
        Catch e As CryptographicException
            Console.WriteLine("A Cryptographic error occurred:
 {0}", e.Message)
        Catch e As UnauthorizedAccessException
            Console.WriteLine("A file error occurred: {0}",
 e.Message)
        End Try
    End Sub


    Function DecryptTextFromFile(ByVal FileName
 As String, ByVal Key()
 As Byte, ByVal IV() As Byte) As String
        Try
            ' Create or open the specified file. 
            Dim fStream As FileStream = File.Open(FileName,
 FileMode.OpenOrCreate)

            ' Create a new Rijndael object.
            Dim RijndaelAlg As Rijndael = Rijndael.Create

            ' Create a CryptoStream using the FileStream 
            ' and the passed key and initialization vector (IV).
            Dim cStream As New
 CryptoStream(fStream, _
                                            RijndaelAlg.CreateDecryptor(Key, IV),
 _
                                            CryptoStreamMode.Read)

            ' Create a StreamReader using the CryptoStream.
            Dim sReader As New
 StreamReader(cStream)

            ' Read the data from the stream 
            ' to decrypt it.
            Dim val As String
 = Nothing

            Try

                val = sReader.ReadLine()

            Catch e As Exception
                Console.WriteLine("An Cerror occurred: {0}",
 e.Message)
            Finally
                ' Close the streams and
                ' close the file.
                sReader.Close()
                cStream.Close()
                fStream.Close()


            End Try

            ' Return the string. 
            Return val

        Catch e As CryptographicException
            Console.WriteLine("A Cryptographic error occurred:
 {0}", e.Message)
            Return Nothing
        Catch e As UnauthorizedAccessException
            Console.WriteLine("A file error occurred: {0}",
 e.Message)
            Return Nothing
        End Try
    End Function
End Module
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;

class RijndaelSample
{

    static void Main()
    {
        try
        {
            // Create a new Rijndael object to generate a key
            // and initialization vector (IV).
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a string to encrypt.
            string sData = "Here is some data to encrypt.";
            string FileName = "CText.txt";

            // Encrypt text to a file using the file name, key, and
 IV.
            EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV);

            // Decrypt the text from a file using the file name, key,
 and IV.
            string Final = DecryptTextFromFile(FileName, RijndaelAlg.Key,
 RijndaelAlg.IV);

            // Display the decrypted string to the console.
            Console.WriteLine(Final);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        Console.ReadLine();
    }

    public static void EncryptTextToFile(String
 Data, String FileName, byte[] Key, byte[] IV)
    {
        try
        {
            // Create or open the specified file.
            FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);

            // Create a new Rijndael object.
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a CryptoStream using the FileStream 
            // and the passed key and initialization vector (IV).
            CryptoStream cStream = new CryptoStream(fStream,
                RijndaelAlg.CreateEncryptor(Key, IV),
                CryptoStreamMode.Write);

            // Create a StreamWriter using the CryptoStream.
            StreamWriter sWriter = new StreamWriter(cStream);

            try
            {
                // Write the data to the stream 
                // to encrypt it.
                sWriter.WriteLine(Data);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {
                // Close the streams and
                // close the file.
                sWriter.Close();
                cStream.Close();
                fStream.Close();
            }
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine("A file error occurred: {0}", e.Message);
        }

    }

    public static string
 DecryptTextFromFile(String FileName, byte[] Key, byte[] IV)
    {
        try
        {
            // Create or open the specified file. 
            FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);

            // Create a new Rijndael object.
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a CryptoStream using the FileStream 
            // and the passed key and initialization vector (IV).
            CryptoStream cStream = new CryptoStream(fStream,
                RijndaelAlg.CreateDecryptor(Key, IV),
                CryptoStreamMode.Read);

            // Create a StreamReader using the CryptoStream.
            StreamReader sReader = new StreamReader(cStream);

            string val = null;

            try
            {
                // Read the data from the stream 
                // to decrypt it.
                val = sReader.ReadLine();


            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {

                // Close the streams and
                // close the file.
                sReader.Close();
                cStream.Close();
                fStream.Close();
            }

            // Return the string. 
            return val;
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
            return null;
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine("A file error occurred: {0}", e.Message);
            return null;
        }
    }
}
継承階層継承階層
System.Object
   System.Security.Cryptography.SymmetricAlgorithm
    System.Security.Cryptography.Rijndael
       System.Security.Cryptography.RijndaelManaged
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Rijndael コンストラクタ

Rijndael の新しインスタンス初期化します。

名前空間: System.Security.Cryptography
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

解説解説
使用例使用例

Rijndael クラス使用してデータ暗号化し、復号化する方法次のコード例示します

Imports System.Security.Cryptography
Imports System.Text
Imports System.IO

Module RijndaelSample

    Sub Main()
        Try
            ' Create a new Rijndael object to generate a key
            ' and initialization vector (IV).
            Dim RijndaelAlg As Rijndael = Rijndael.Create

            ' Create a string to encrypt.
            Dim sData As String
 = "Here is some data to encrypt."
            Dim FileName As String
 = "CText.txt"

            ' Encrypt text to a file using the file name, key, and IV.
            EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV)

            ' Decrypt the text from a file using the file name, key,
 and IV.
            Dim Final As String
 = DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV)

            ' Display the decrypted string to the console.
            Console.WriteLine(Final)
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try

        Console.ReadLine()

    End Sub


    Sub EncryptTextToFile(ByVal Data As
 String, ByVal FileName As
 String, ByVal Key() As Byte, ByVal IV() As Byte)
        Try
            ' Create or open the specified file.
            Dim fStream As FileStream = File.Open(FileName,
 FileMode.OpenOrCreate)

            ' Create a new Rijndael object.
            Dim RijndaelAlg As Rijndael = Rijndael.Create

            ' Create a CryptoStream using the FileStream 
            ' and the passed key and initialization vector (IV).
            Dim cStream As New
 CryptoStream(fStream, _
                                           RijndaelAlg.CreateEncryptor(Key, IV),
 _
                                           CryptoStreamMode.Write)

            ' Create a StreamWriter using the CryptoStream.
            Dim sWriter As New
 StreamWriter(cStream)

            Try

                ' Write the data to the stream 
                ' to encrypt it.
                sWriter.WriteLine(Data)
            Catch e As Exception

                Console.WriteLine("An error occurred: {0}",
 e.Message)

            Finally

                ' Close the streams and
                ' close the file.
                sWriter.Close()
                cStream.Close()
                fStream.Close()

            End Try
        Catch e As CryptographicException
            Console.WriteLine("A Cryptographic error occurred:
 {0}", e.Message)
        Catch e As UnauthorizedAccessException
            Console.WriteLine("A file error occurred: {0}",
 e.Message)
        End Try
    End Sub


    Function DecryptTextFromFile(ByVal FileName
 As String, ByVal Key()
 As Byte, ByVal IV() As Byte) As String
        Try
            ' Create or open the specified file. 
            Dim fStream As FileStream = File.Open(FileName,
 FileMode.OpenOrCreate)

            ' Create a new Rijndael object.
            Dim RijndaelAlg As Rijndael = Rijndael.Create

            ' Create a CryptoStream using the FileStream 
            ' and the passed key and initialization vector (IV).
            Dim cStream As New
 CryptoStream(fStream, _
                                            RijndaelAlg.CreateDecryptor(Key, IV),
 _
                                            CryptoStreamMode.Read)

            ' Create a StreamReader using the CryptoStream.
            Dim sReader As New
 StreamReader(cStream)

            ' Read the data from the stream 
            ' to decrypt it.
            Dim val As String
 = Nothing

            Try

                val = sReader.ReadLine()

            Catch e As Exception
                Console.WriteLine("An Cerror occurred: {0}",
 e.Message)
            Finally
                ' Close the streams and
                ' close the file.
                sReader.Close()
                cStream.Close()
                fStream.Close()


            End Try

            ' Return the string. 
            Return val

        Catch e As CryptographicException
            Console.WriteLine("A Cryptographic error occurred:
 {0}", e.Message)
            Return Nothing
        Catch e As UnauthorizedAccessException
            Console.WriteLine("A file error occurred: {0}",
 e.Message)
            Return Nothing
        End Try
    End Function
End Module
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;

class RijndaelSample
{

    static void Main()
    {
        try
        {
            // Create a new Rijndael object to generate a key
            // and initialization vector (IV).
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a string to encrypt.
            string sData = "Here is some data to encrypt.";
            string FileName = "CText.txt";

            // Encrypt text to a file using the file name, key, and
 IV.
            EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV);

            // Decrypt the text from a file using the file name, key,
 and IV.
            string Final = DecryptTextFromFile(FileName, RijndaelAlg.Key,
 RijndaelAlg.IV);

            // Display the decrypted string to the console.
            Console.WriteLine(Final);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        Console.ReadLine();
    }

    public static void EncryptTextToFile(String
 Data, String FileName, byte[] Key, byte[] IV)
    {
        try
        {
            // Create or open the specified file.
            FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);

            // Create a new Rijndael object.
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a CryptoStream using the FileStream 
            // and the passed key and initialization vector (IV).
            CryptoStream cStream = new CryptoStream(fStream,
                RijndaelAlg.CreateEncryptor(Key, IV),
                CryptoStreamMode.Write);

            // Create a StreamWriter using the CryptoStream.
            StreamWriter sWriter = new StreamWriter(cStream);

            try
            {
                // Write the data to the stream 
                // to encrypt it.
                sWriter.WriteLine(Data);
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {
                // Close the streams and
                // close the file.
                sWriter.Close();
                cStream.Close();
                fStream.Close();
            }
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine("A file error occurred: {0}", e.Message);
        }

    }

    public static string
 DecryptTextFromFile(String FileName, byte[] Key, byte[] IV)
    {
        try
        {
            // Create or open the specified file. 
            FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);

            // Create a new Rijndael object.
            Rijndael RijndaelAlg = Rijndael.Create();

            // Create a CryptoStream using the FileStream 
            // and the passed key and initialization vector (IV).
            CryptoStream cStream = new CryptoStream(fStream,
                RijndaelAlg.CreateDecryptor(Key, IV),
                CryptoStreamMode.Read);

            // Create a StreamReader using the CryptoStream.
            StreamReader sReader = new StreamReader(cStream);

            string val = null;

            try
            {
                // Read the data from the stream 
                // to decrypt it.
                val = sReader.ReadLine();


            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: {0}", e.Message);
            }
            finally
            {

                // Close the streams and
                // close the file.
                sReader.Close();
                cStream.Close();
                fStream.Close();
            }

            // Return the string. 
            return val;
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
            return null;
        }
        catch (UnauthorizedAccessException e)
        {
            Console.WriteLine("A file error occurred: {0}", e.Message);
            return null;
        }
    }
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Rijndael フィールド


プロテクト フィールドプロテクト フィールド

  名前 説明
プロテクト フィールド BlockSizeValue  暗号操作ブロック サイズビット単位表します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド FeedbackSizeValue  暗号操作フィードバック サイズビット単位表します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド IVValue  対称アルゴリズム使用する初期化ベクタ (IV) を表します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド KeySizeValue  対称アルゴリズム使用する共有キーサイズビット単位表します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド KeyValue  対称アルゴリズム共有キー表します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド LegalBlockSizesValue  対称アルゴリズムサポートされているブロック サイズ指定します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド LegalKeySizesValue  対称アルゴリズムサポートされているキー サイズ指定します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド ModeValue  対称アルゴリズム使用する暗号モード表します。 ( SymmetricAlgorithm から継承されます。)
プロテクト フィールド PaddingValue  対称アルゴリズム使用する埋め込みモード表します。 ( SymmetricAlgorithm から継承されます。)
参照参照

関連項目

Rijndael クラス
System.Security.Cryptography 名前空間

その他の技術情報

暗号サービス

Rijndael プロパティ


パブリック プロパティパブリック プロパティ

参照参照

関連項目

Rijndael クラス
System.Security.Cryptography 名前空間

その他の技術情報

暗号サービス

Rijndael メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド参照)
  名前 説明
パブリック メソッド Clear  SymmetricAlgorithm クラスによって使用されているすべてのリソース解放します。 ( SymmetricAlgorithm から継承されます。)
パブリック メソッド Create オーバーロードされます。 Rijndael アルゴリズム実行する暗号オブジェクト作成します
パブリック メソッド CreateDecryptor  オーバーロードされます対称復号化オブジェクト作成します。 ( SymmetricAlgorithm から継承されます。)
パブリック メソッド CreateEncryptor  オーバーロードされます対称暗号オブジェクト作成します。 ( SymmetricAlgorithm から継承されます。)
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 ( Object から継承されます。)
パブリック メソッド GenerateIV  派生クラスオーバーライドされると、アルゴリズム使用するランダムな初期化ベクタ (IV) を生成します。 ( SymmetricAlgorithm から継承されます。)
パブリック メソッド GenerateKey  派生クラスオーバーライドされると、アルゴリズム使用するランダム キー (Key) を生成します。 ( SymmetricAlgorithm から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 ( Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスType取得します。 ( Object から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド ToString  現在の Object を表す String返します。 ( Object から継承されます。)
パブリック メソッド ValidKeySize  指定されキー サイズが、現在のアルゴリズムに対して有効かどうか判断します。 ( SymmetricAlgorithm から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

Rijndael クラス
System.Security.Cryptography 名前空間

その他の技術情報

暗号サービス

Rijndael メンバ

Rijndael 対称暗号アルゴリズムすべての実装継承元となる基本クラス表します

Rijndael データ型公開されるメンバを以下の表に示します


プロテクト コンストラクタプロテクト コンストラクタ
  名前 説明
プロテクト メソッド Rijndael Rijndael新しインスタンス初期化します。
プロテクト フィールドプロテクト フィールド
パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
( プロテクト メソッド参照)
  名前 説明
パブリック メソッド Clear  SymmetricAlgorithm クラスによって使用されているすべてのリソース解放します。 (SymmetricAlgorithm から継承されます。)
パブリック メソッド Create オーバーロードされますRijndael アルゴリズム実行する暗号オブジェクト作成します
パブリック メソッド CreateDecryptor  オーバーロードされます対称復号化オブジェクト作成します。 (SymmetricAlgorithm から継承されます。)
パブリック メソッド CreateEncryptor  オーバーロードされます対称暗号オブジェクト作成します。 (SymmetricAlgorithm から継承されます。)
パブリック メソッド Equals  オーバーロードされます2 つObject インスタンス等しかどうか判断します。 (Object から継承されます。)
パブリック メソッド GenerateIV  派生クラスオーバーライドされると、アルゴリズム使用するランダムな初期化ベクタ (IV) を生成します。 (SymmetricAlgorithm から継承されます。)
パブリック メソッド GenerateKey  派生クラスオーバーライドされると、アルゴリズム使用するランダム キー (Key) を生成します。 (SymmetricAlgorithm から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用適してます。 (Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスType取得します。 (Object から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド ToString  現在の Object を表す String返します。 (Object から継承されます。)
パブリック メソッド ValidKeySize  指定されキー サイズが、現在のアルゴリズムに対して有効かどうか判断します。 (SymmetricAlgorithm から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

Rijndael クラス
System.Security.Cryptography 名前空間

その他の技術情報

暗号サービス

Advanced Encryption Standard

(Rijndael から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/08/09 02:48 UTC 版)

Advanced Encryption Standard
(Rijndael)
The SubBytes step, one of four stages in a round of AES
一般
設計者 フィンセント・ライメン, ホァン・ダーメン英語版
初版発行日 1998
派生元 Square
後継 Anubis, Grand Cru
認証 AES採用, CRYPTREC, NESSIE, NSA
暗号詳細
鍵長 128, 192 or 256 bits[1]
ブロック長 128 bits[2]
構造 SPN構造
ラウンド数 10, 12, 14(鍵長による)
最良の暗号解読
完全な総当たり攻撃よりも計算量の多い攻撃が発表されているが、2013年時点では計算量が少ない攻撃は見つかっていない:[3] AES-128については、完全2部グラフ(Biclique)を使用すると2126.1の計算量で鍵を復元することが可能である。AES-192とAES-256に対するBiclique攻撃英語版では、それぞれ2189.7と2254.4の計算複雑度が適用される。関連鍵攻撃では、AES-192とAES-256をそれぞれ2176と299.5の複雑さで破ることができる。

Advanced Encryption Standard (AES) は、アメリカ2001年に標準暗号として定めた共通鍵暗号アルゴリズムである。アメリカ国立標準技術研究所(NIST)が公募し、Rijndael(ラインダール)がAESとして採用された[4]

概要

AES以前の標準暗号であったDESは、次の2点が問題であった。

  • コンピュータの能力とネットワーク技術の上昇による相対的な強度の低下
  • NSAの関与がある設計の不透明性(詳細はDESの記事を参照)

そこで、新しい標準暗号がアメリカ国立標準技術研究所(NIST)の主導によって公募され、AESが選出された。2001年3月に FIPS PUB 197 として公表された。

厳密には「AES」は、選出されなかった暗号も含む、手続き期間中から使われた「新しい標準暗号」の総称であり、選出された暗号方式自体の名はRijndael(ラインダール)である。

AESはSPN構造ブロック暗号である。ブロック長は128ビットであり、鍵長には128ビット・192ビット・256ビットの3種類が選択できる(鍵長が大きいほうが暗号強度が高い)。これに対し、AESの元となった Rijndael では、ブロック長と鍵長が可変であり、128ビットから256ビットまでの32ビットの倍数が選べる。NISTが公募した際のスペックに従い、米国標準となったAESではブロック長は128ビットに固定され、鍵長も3種類に限られた[5]

経緯

AESの選定

旧規格 DES (FIPS 46) の安全性が低下したので、1997年9月にNIST(アメリカ国立標準技術研究所)が後継の暗号標準AES (Advanced Encryption Standard) とすべく共通鍵ブロック暗号を公募した。公募要件には下記のような条件が挙げられた[5]

  • 米国に限らず世界中で、制限なく無料で利用できなければならないこと。
  • 詳細なアルゴリズム仕様を公開すること。
  • ANSI C及びJavaによる実装を行うこと。
  • 暗号強度評価を公開すること。

AESの最終候補

世界から応募された21方式から、公募要件を満たした15方式に対する評価が行われ、安全性と実装性能に優れた5方式が最終候補として残った。最終候補および設計者は下記のとおりである[5]

  • Rijndael - ホァン・ダーメン英語版フィンセント・ライメン
  • Serpent(サーペント、または、サーパン)- ロス・アンダーソン英語版、エリ・ビーハム、ラーズ・ヌードセン
  • RC6 - ロナルド・リヴェスト、マット・ロブショー、レイ・シドニー、イーチュン・リサ・イン
  • Twofish - ブルース・シュナイアー、ジョン・ケルシー、ダグ・ホワイティング、デーヴィッド・ワグナー、クリス・ホール、ニールス・ファーガソン
  • Mars - カロリン・バーウィック、ドン・カッパースミス、エドワード・ダヴィニョン、ロザリオ・ジェンナロ、シャイ・ハレヴィ、チャランジット・ジュトラ、ステファン・マテリアス Jr.、ルーク・オコーナー、モハンマド・ペイラヴィアン、デヴィド・サフォード、ネヴェンコ・ズニコフ

AESの決定

最終選考の結果、あらゆる実装条件で優れた実装性能を発揮したベルギールーヴェン・カトリック大学の研究者ホァン・ダーメン英語版 (Joan Daemen) と フィンセント・ライメン (Vincent Rijmen) が設計した Rijndael (ラインダール)が2000年10月に採用された。

Rijndaelという名称のうち、RijnはRijmen、daeはDaemenから取られたことは明白だが、lはどこから来たのかが不明だった。指導教授だったバート・プレネル (Bart Preneel)英語版 から取ったのではという説があり、Rijmenが講演した際に質問を受けたが、その答えは "It's a conjecture.(それは憶測に過ぎないね)" だった[要出典]

暗号化の方法

AESはSPN構造ブロック暗号で、ブロック長は128ビット、鍵長は128ビット・192ビット・256ビットの3つが利用できる[4]

暗号化処理では、始めに鍵生成を行う。AES暗号の鍵長によって変換のラウンド数が異なる。次のとおりである。

  • 鍵長128ビットのとき、ラウンド数は10回である。
  • 鍵長192ビットのとき、ラウンド数は12回である。
  • 鍵長256ビットのとき、ラウンド数は14回である。

暗号化は下記の4つの処理から構成される[5]

  1. SubBytes - 換字表(Sボックス)による1バイト単位の置換。
  2. ShiftRows - 4バイト単位の行を一定規則で左シフトする。
  3. MixColumns - ビット演算による4バイト単位の行列変換。
  4. AddRoundKey - ラウンド鍵とのXORをとる。

これら4つの処理を1ラウンドとして暗号化を行う。

なお、復号は上記処理の逆変換を逆順で実行する。

  1. AddRoundKey
  2. InvMixColumns
  3. InvShiftRows
  4. InvSubBytes

安全性

関連鍵攻撃により、256ビットのAES暗号の第9ラウンドまでが解読可能である。また、選択平文攻撃により、192ビットおよび256ビットのAES暗号の第8ラウンドまで、128ビットのAES暗号の第7ラウンドまでが解読可能である (Ferguson et al., 2000)。シュナイアーはAESの「代数的単純さに疑問」を感じているが、AESは欧州の暗号規格NESSIEや日本の暗号規格CRYPTRECでも採用された。AESの数学的構造は他のブロック暗号と異なり、きちんとした記述もある[6][7]

この暗号は暗号化方式としてはまだどんな攻撃にも屈していないが、実装によってはサイドチャネル攻撃が成功する場合がある[8][9]

関連項目

脚注

  1. ^ Rijndaelでは128, 160, 192, 224, 256 bitsが選択可能。AESのスペックに合わせて3つに限定
  2. ^ Rijndaelでは128, 160, 192, 224, 256 bitsが選択可能。AESのスペックに合わせて128 bitsのみに限定
  3. ^ Biclique Cryptanalysis of the Full AES” (PDF) (英語). 2016年3月6日時点のオリジナルよりアーカイブ。2016年10月9日閲覧。
  4. ^ a b 岡本 暗号理論入門 第2版(2002:51-52)
  5. ^ a b c d 結城 暗号技術入門 第3版(2003: 69-71)
  6. ^ A simple algebraic representation of Rijndael (Niels Ferguson, Richard Schroeppel, and Doug Whiting)(2003年6月6日時点のアーカイブ
  7. ^ Sean Murphy (英語)
  8. ^ 角尾幸保, 久保博靖, 茂真紀, 辻原悦子, 宮内宏, "S-boxにおけるキャッシュ遅延を利用したAESへのタイミング攻撃 (PDF) ", SCIS2003
  9. ^ Cache-timing attacks on AES (PDF) (英語) - (Daniel J. Bernstein)

参考文献

  • FIPS 197 (PDF) 、NIST発行、2001年 (英語)
  • Daemen and Rijmen, Rijndael 仕様書(補追版) (PDF) 、1999年発行-2003年補追 (英語)
  • 岡本栄司『暗号理論入門』(第2版)共立出版、2002年。ISBN 4-320-12044-2 
  • 結城浩『暗号技術入門 - 秘密の国のアリス』(第3版)ソフトバンクパブリッシング、2003年。 ISBN 4-7973-2297-7 
  • 澤田秀樹:「暗号理論と代数学 増補・AES(高度暗号化標準) Kindle版」,(2021年9月16日).

外部リンク


RIJNDAEL

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/13 02:48 UTC 版)

スターソルジャー」の記事における「RIJNDAEL」の解説

ショット後方集中しブラスター自機前方レーザー放つタイプ・レーザー。

※この「RIJNDAEL」の解説は、「スターソルジャー」の解説の一部です。
「RIJNDAEL」を含む「スターソルジャー」の記事については、「スターソルジャー」の概要を参照ください。

ウィキペディア小見出し辞書の「Rijndael」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Rijndael」の関連用語

Rijndaelのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Rijndaelのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのAdvanced Encryption Standard (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのスターソルジャー (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS