web-dev-qa-db-ja.com

「xビット長のキー」とはどういう意味ですか?

「暗号システムCはxビットの長さの鍵を使用する」とはどういう意味か知りたいのですが。ビット長の意味がわかりません...エンコードに依存しませんか?同じWordがutf8、iso、unicodeで異なる長さのビット文字列にエンコードするので、キーの長さを定義するために使用される一般的なエンコードはありますか?または、「xビットの長さ」とは完全に異なる何かを意味しますか?

22
strauberry

対称アルゴリズム対称暗号化メッセージ認証コード )の場合、キーは一連の正しい長さの任意のシーケンスが可能なキーになるようなビット。たとえば、 [〜#〜] aes [〜#〜] は対称暗号化アルゴリズム(具体的には ブロック暗号 )であり、128、192、 256ビット:128、192、または256ビットの任意のシーケンスをキーとして使用できます。これらのビットをどのようにエンコードするかはここでは関係ありません。それらをそのまま(バイトあたり8ビット)ダンプするか、Base64または16進数を使用するか、文字列から推測するかなどは関係ありません。

いくつかのアルゴリズムにはいくつかの落とし穴があります。主な例は、AESの前身である [〜#〜] des [〜#〜] です。 DESはdefinedで、64ビットキーを使用します。ただし、アルゴリズムの定義を見ると、これらのビットの56だけが使用されていることがわかります。他の8つは単に無視されます(1から64までのビット番号を付けると、これらはビット8、16、24、32、40、48、56、および64です。他の56に応じて「パリティビット」になるはずです。しかし、誰も実際にそれらを設定したりチェックしたりすることを気にしません)。そのため、DESには56ビットキーがあるとよく言われます。これは、キーの長さがセキュリティに関連しているためです。アルゴリズムが長さnビットのキーを受け入れる場合、2があります。可能なキー、つまりすべてを試す(「徹底的な検索」または「ブルートフォース」として知られる攻撃)の時間は、2に比例します。nで十分大きい、つまり約85を超える場合、これは技術的に実行不可能です)。その意味で、DESは56ビットキーのセキュリティを提供します(256"本当に異なる"可能なキー)。ただし、DESを実装するライブラリを使用する場合、そのライブラリはDESキーを64ビットのシーケンスとして期待します(多くの場合8バイトとして提供されます)。

特別なルールを持つ別のアルゴリズムは RC2 です。長さ8〜128ビット(8の倍数のみ)のキーを受け入れます。ただし、有効なキーの長さと呼ばれる "T1"で表される追加のパラメーターもあります。鍵の処理の途中で、内部値はT1ビットのシーケンスに「削減」されます。つまり、後続の暗号化は、その内部値のT1固有ビットの値のみに依存します。徹底的な検索に対するRC2の抵抗は、T1ビットのキーによって提供されるものにすぎません。その内部値に対してT1ビットのすべての可能なシーケンスを試すことができるからです。それでも、RC2には、実際のキーの長さ(キーとして提供されるビットのシーケンスの長さ)があり、T1を超える場合があります。

非対称アルゴリズムの場合(別名 公開鍵暗号 、非対称暗号化、デジタル署名、一部の鍵交換プロトコル、およびいくつかの難解なアルゴリズム)、キーは、公開キーと秘密キーで構成されるpairsによって機能します。これらのキーは、内部構造が重い数学オブジェクトです。 「キーの長さ」は、関連する数学的オブジェクトの1つのサイズの従来の尺度です。

たとえば、RSA公開鍵には、modulusと呼ばれる大きな整数と、と呼ばれる他の整数(通常は小さい)が含まれます公開指数。 「1024ビットRSA鍵」とは、モジュラスの長さが1024ビットであること、つまり2より大きい整数であることを意味します10232より低い1024。このような整数は、1024ビットのシーケンス、つまり128バイトとしてエンコードできます。ただし、公開鍵には公開指数も含まれている必要があるため、実際にエンコードされる長さは長くなります。そして、秘密鍵は、理論的な観点では、モジュラスを素数に因数分解できる方法に関する知識です。その知識の伝統的なエンコーディングは、主要な要素のエンコーディングであり、要素から再計算できる一連のヘルパー値(ただし少し高価です)とともに、アルゴリズムの高速実行に役立ちます。

個別の数学で機能する個別の鍵タイプの場合、他の「長さ」が使用されるため、単に鍵の長さを比較するだけではアルゴリズムのセキュリティを直接比較することはできません。 256ビット [〜#〜] ecdsa [〜#〜] キーは、768ビットのRSAキーよりもはるかに安全です。また、公開鍵と秘密鍵のペアに固有の数学的構造により、ランダムなビットの束を試すよりもはるかに高速な攻撃が可能であり、多くの微妙な詳細があります。多くの規制機関が考案した主要なサイズの比較に関するさまざまなルールのセットの説明とオンライン計算機については このサイト を参照してください。

23
Thomas Pornin

AがBになり、BがCになるように、すべての文字をアルファベットの1つ右にシフトする単純な暗号化を検討してください。そのため:HELLOは次のように暗号化されます:IFMMP

右に1文字、右に2文字、または右に最大25文字シフトできます。 「右側の文字数」を「キー」と考えてください。 0〜25の数値を保持するには5バイトが必要です。したがって、キーサイズは「5ビット」です。

または、右にシフトする代わりに、アルファベットをランダムに並べ替えて、1対1のマッピングを行うとします。それは文字「P」に変換され、メッセージ:HELLOは次のようになります:PGDDL

アルファベットのランダムな並べ替えが5ビットの数値に基づく数学的シーケンスで行われ、すべての数値が異なるシーケンスを生成するとします。したがって、5ビットの数値も「キー」です。

5ビットのキーの問題は、32の組み合わせしかないことです。暗号化アルゴリズムがわかっていれば、適切な組み合わせが見つかるまで32個のキーすべてを使用できます。キーが大きいほど、これは困難になります-指数関数的に。 6ビットキーには64の組み合わせがあり、7ビットキーには128の組み合わせがあります。 10ビットのキーには1000の組み合わせ、20ビットのキーには100万の組み合わせ、30ビットのキーには10億の組み合わせがあります。

たとえば、すべての組み合わせをブルートフォースで攻撃しようとする1秒あたり10億のキーをテストできるコンピューターがあるとします。つまり、1秒で30ビットのキーを破ることができます。ただし、60ビットのキーを解読するには10億秒(または34年)かかります。

追加する30ビットごとに、10億倍も難しくなります。 NSAのようなスパイ機関は、スーパーコンピュータを使用して60ビットのキーを解読できますが、90ビットのキーは解読するのが10億倍難しく、120ビットのキーはさらに何十億倍も難しくなります90ビットのキーよりもクラックする。

そのため、古いWEP(40ビット)とDES(56ビット)は廃止されたと見なされます。すべての組み合わせを試すことで、デスクトップコンピューターでクラックできます。そのため、AESなどの最新の暗号化では128を使用しますビットこれらのアルゴリズムを強引にクラックすることはできません。

14

キーの長さ(ビット単位)は、サイズの指定にすぎません。 128ビットのキーは16バイトのスペースを占有します-プロセッサーが使用する生のビットだけです。特別なものはなく、翻訳もありません。

エンコーディングとは、ビットを意味のあるものにマッピングすることです。たとえば、ASCII=の8ビットシーケンス01100001(0x61)は文字 "a"です。キーはランダムデータであり、意味がないため、エンコードはバイナリデータをたとえば、BASE64などの印刷可能なもの。したがって、「文字aを書き込むために必要なビットのシーケンス」の代わりに、キーは「このビットは何ですか?このビットは何ですか?このビットは何ですか?」 ?」.

3
Jeff Ferland

同じWordがutf8、iso、unicodeで異なる長さのビット文字列にエンコードするので、キーの長さを定義するために使用される一般的なエンコードはありますか?

キーは言葉ではありません。これはビットのシーケンスです。あなたが話す「一般的なエンコーディング」はエンコーディングではありません。

別のメモでは、UTF-8とISO- *と呼ばれるcode-point-> stringエンコーディングがありますが、unicodeはエンコーディングではありません。キャラクターセットです。

たぶん、いくつかの用語を定義すると役立つかもしれません。

「ユニコードなどの「文字セット」は、通常整数インデックスで識別されるシンボルのセットです。ユニコードでは、これらのシンボルはコードポイント(厳密にはユニコードのスカラー値)とも呼ばれます。

「文字列」は、アルファベットから選択された一連の記号です。特に指定のない限り、シーケンスは有限長であり、アルファベットはUnicodeのサブセットですが、この用語は他のアルファベットにも使用できます:「バイト文字列」(アルファベットは8ビットで表現可能な整数のセットです[0,255])または[-128,127])または "UTF-16文字列"(アルファベットは整数のセット[0,65535])。

「エンコーディング」は、ある種類の文字列から別の種類の文字列への(通常は可逆的な)マッピングです。 UTF-8は、「コードポイント」シーケンス(通常の文字列)をバイト文字列にマップします。

1
Mike Samuel

ビット長の意味がわかりません...エンコードに依存しませんか?

テキスト-複数の言語からの文字とその他のグリフのシーケンス-は抽象化です。人間はテキストの扱い方を知っていますが、コンピュータはそうではありません-コンピュータがそれを行う方法を作るまでは。この方法は「エンコーディング」と呼ばれます。エンコーディングとは、一連の文字を一連のバイトにマッピングし、一連のバイトを一連の文字にマッピングする方法です。あるエンコーディングでは、文字を1バイトにエンコードできますが、別のエンコーディングでは、同じ文字が4バイトにエンコードされます。

簡単に言うと、テキストをエンコードして一連のバイトにすることができます。ただし、テキストは抽象的であり、処理するにはencodedする必要があります。

しかし、バイトのシーケンスは単なるバイトのシーケンスであり、テキストとは何の関係もなく、エンコーディングの概念もまったくありません。

ビットのシーケンスは、長さが常に8ビットの倍数である限り、バイトのシーケンスと同等です。したがって、誰かが16バイトのキーについて話すとき、それは128ビットのキーと同等です。

暗号化関数を扱うときは、常にビットまたはバイトのシーケンスのみを扱うように注意する必要があります。暗号化またはハッシュ化したいテキストがある場合、最初にテキストをバイトシーケンスにエンコードするように注意してください。すべてのケースで同じエンコーディングを使用するか、この場合に使用されたエンコーディングを書き留めます。暗号化またはハッシュするのはバイトのみで、テキストは不可です。エンコーディングはテキストをバイトに変換する方法です。同様に、16進数またはbase64のテキストエンコーディングで表されたキーがある場合は、まずキーをバイトにデコードするように注意する必要があります。

1
yfeldblum

その実際の意味は、暗号化または復号化アルゴリズムを続行するために必要なキーを構成するビット数です。鍵のサイズが256ビットであるとします。つまり、2 ^ 255より大きく2 ^ 256より小さい整数を取る場合です。整数の中間では、それを公開鍵または秘密鍵として受け取る必要があります。

0
seshu babu