RSA暗号設定および可能な結果の選択

カットの下では、「悪い」RSA暗号パラメータを選択する例が説明されています。

教科書「Fundamentals of Cryptography」A.P。の著者を引用します。 アルフェロフ、A.Yu。 ズボフ、A.S。 クズミン、A.V。 モスクワのチェレムスキン。 Helios ARV、2001年、316ページ:

「ネットワークの特派員ごとにRSAモジュール(番号n )を選択する際には注意が必要であることを強調する必要があります。 これに関して、次のことが言える。 読者は、3つの値pq、またはφ(n)のいずれかを知っていれば、RSA秘密鍵を簡単に見つけることができることを独立して検証できます...」

このテキストを補足します。 以下のマニュアルの例で行われたように、RSA暗号モジュールの選択に失敗した場合、秘密鍵がなくてもテキストを解読できます。 3つの名前付き数量のいずれも知らない。

これを行うには、暗号モジュールnで指定された暗号テキスト、暗号公開キーeを使用し、「キーレス読み取り」攻撃の3つのステップのみを実行するだけで十分です。 4番目の攻撃ステップの後、前のステップでソースコードが受信されたことが確認されます。 それがいかに簡単かを示します。

まず、上記のマニュアルの313〜315ページに例を示します。


短いソーステキストメッセージ暗号化RSA
受信者は、特性n = pq = 527でコードを設定します。ここで、 p = 17q = 31φ(n)=(p –1)(q-1)= 480です。 公開鍵eとして、 φ(n)e = 7と互いに素な数が選択されます。 この数に対して、拡張ユークリッドアルゴリズムを使用すると、 e∙u +φ(n)∙v = 1の関係を満たす整数uおよびvが見つかります。

480 = 7∙68 + 4
7 = 4∙1 + 3
4 = 3∙1 + 1
1 = 4–3∙1 = 4–(7–4∙1)∙1 = 4∙2–7∙1 =(480–7∙68)∙2–7∙1 = 480∙2–7∙137、
v = 2、u = –137

–137≡343(mod480)なのでd = 343です。

チェック: 7∙343 =2401≡1(mod480)

テキストメッセージは、間隔[0、526]に含まれる一連の数字として表示されます。 このため、 RS、およびAの文字は5桁の2進数でエンコードされます。 これらの英字アルファベットのシリアル番号は、バイナリ表現で使用されます。

R = 18 10 =(10010) 2S = 19 10 =(10011) 2
A = 1 10 =(00001) 2

次に、 RSA =(100101001100001) 2 。 テキストを制限された長さのブロックに分割すると、 RSA =(100101001)、(100001)=(M 1 = 297、M 2 = 33)の2つのブロックが表示されます。

ソーステキストのブロックM 1 = 297M 2 = 33は順番に暗号化されます。
y 1 =k(1)=1 e≡2977(mod527)= 474

ここで、彼らは次の事実を利用しました:

297 7 =((297 23 )297≡(mod527)=(200 3 (mod527)297)(mod527)= 474
y 2 =k(2)= M 2 e≡337(mod527)= 407

暗号文は、元の暗号文と同様に、2つのブロックの形式で取得されます。1 = 474 ; y 2 = 407

復号化は、アクションのシーケンスD k (y i )=(y id =(y i343 (mod 527)i = 1,2で表されます。

dの累乗の計算は実行するのより便利です。以前は、2の累乗の和で指数を表していました。つまり、 343 = 256 + 64 + 16 + 4 + 2 + 1です。

指数d = 343のこの表現を使用して、以下を取得します。

474 2≡174(mod527)、
474 4≡237(mod527)、
474 8≡307(mod527)、
474 16≡443(mod527)、
474 32≡205(mod527)、
474 64≡392(mod527)、
474128≡307(mod527)、
474,256≡443(mod527)、
そして最後に474 343 (mod527)=(443∙392∙443∙237∙174∙474)(mod527)= 297

407 343 (mod527)= 33も同じ方法で計算されます。

復号化されたメッセージのアルファベット表記への移行により、 RSAが得られます。

この例を検討した後、マニュアルではRSAシステムの安定性について説明しています。 各ネットワーク特派員にRSA暗号モジュール(番号n )を選択する際の注意の必要性が強調されています。 暗号化システムの選択された特性の要件を無視できないことを示します。 そのような要件の中で、残念ながら、与えられた例が示す違反を示していません。

RSA暗号に対する攻撃


RSA暗号に対する攻撃の例を考えてみましょう。 トレーニングマニュアル「Fundamentals of Cryptography」APの313〜315ページに記載されている例のデータを使用します。 アルフェロフ、A.Yu。 ズボフ、A.S。 クズミン、A.V。 モスクワのチェレムスキン。 Helios ARV、2001。

この例で選択したシステムパラメータの失敗(許容不能)は、ソーステキストのキーレス読み取りの攻撃を実装する計算によって簡単に示されます。 このような攻撃の本質は次のとおりです。 RSA暗号公開鍵( e = 7n = 527 )および暗号化されたテキストが指定されています。 この例では、暗号文は2つのブロックで表されます
y =(y 1 = 474、y 2 = 407)

暗号化された各ブロックは個別に攻撃されます。最初に1 = 474で攻撃 、復号化の後2 = 407で別のブロックを攻撃します。

次に、攻撃アルゴリズムの2つの連続したステップの結果を保存し、公開キー、既存の暗号化されたテキストのi1 = yの一連の数値を使用して、暗号化を繰り返して形成されます。

暗号文を攻撃するアルゴリズムでは、 y i e j (mod n)=(y i e j – 1 (mod n)) e (mod n)= y ii> 1のステップ番号jが決定されます。 最後の関係から、 eのべき乗まで値(y i e j – 1 (mod n))を上げると、初期暗号文y i = y 1が得られることがわかります。

ただし、これは、このステップでプレーンテキストが暗号化されたことも意味します。 画面上の計算機を使用した直接計算(ごく少数)により、暗号化サイクルが終了するjの値を、サイクルの開始元の値y 1で見つけます。

1 = 474暗号文の最初のブロックへの攻撃。
ステップ1474 7 (mod527)= 382 ;
ステップ2382 7 (mod527)= 423 ;
ステップ3423 7 (mod527)= 297 ;
ステップ4 :このステップでは、すでに見つかったソーステキストが暗号化されますが、攻撃者はソーステキストを知らないため、それを完了する必要があります。 攻撃の完了の兆候は、初期暗号テキスト値( 474 )と4番目の暗号化ステップの結果の一致です。 これは偶然の出来事です。

297 7 (mod527)= 474は、最初の(最初の)暗号文ブロックを受け取りました。 最初のブロックに対する攻撃は、 1 = 474で正常に完了しました 。 ステップ3の前の結果は、オープンテキストM 1 = 297と等しくなります。

本質的に、 n = 527を法とする剰余環では、 n = 527を法とする剰余r = 297の短い処理サイクル実現されました。 これはy i = y 1 = 297と記述されます。 電力控除を形成します
(((297 7 (mod527)) 7 (mod527)) 7 (mod527)) 7 = 297

2 = 407暗号文での2番目のブロックへの攻撃。
ステップ1407 7 (mod527)= 16 ;
ステップ 2:16 7 (mod527)= 101 ;
ステップ3101 7 (mod527)= 33 ;
ステップ 4:33 7 (mod527)= 407

繰り返しになりますが、3番目のステップでソーステキストブロックが受信されましたが( M 2 = 33 )、これは攻撃者に知られておらず、次の(4番目のステップ)を実行します。

基本的に、 n = 527を法とする剰余環において、 n = 527を法とする剰余r = 33の短い処理サイクル実現されました。 これはy i = y 2 = 33と記述されます。
べき乗剰余を形成します((33 7 (mod527)) 7 (mod527)) 7 (mod527)= 33

攻撃の結果(ソーステキストM 1 = 297M 2 = 33 )は、指定された暗号文のトリプル暗号化によって取得されました。 攻撃者の暗号文の成功を想像するのは困難です。

モジュールの選択と暗号の他のパラメーターの議論を続けると、暗号モジュール( n = 527 )が一部のソーステキストの暗号化をまったく許可しないことを追加できます。 さらに、公開鍵eの値の選択は大きな役割を果たしません。 モジュールn = 527で選択された暗号を使用して暗号化することは一般に不可能なソーステキストの値があります。

与えられたeはどれも数字で表されるソースコードを暗号化できません
187、341、154および373

例(一部のソーステキストの値を暗号化できないこと)


ソーステキストを4つのブロックy =(y 1 = 154、y 2 = 187、y 3 = 341、y 4 = 373)で表すとします。 暗号公開鍵の指数eは、オイラー関数φ(n)=φ(527)= 480の任意の素数にすることができます。 ただし、検討中の場合、公開鍵eは任意に設定できます。 確かに、 e = 2、4、7、9、17、111とします:

154 2 (mod527)= 1 ;
154 4 (mod527)= 1 ;
154 7 (mod527)= 154 ;
154 9 (mod527)= 154 ;
154 17 (mod527)= 154 ;
154 111 (mod527)= 154 ;
187 2 (mod527)= 187 ;
187 4 (mod527)= 187 ;
187 7 (mod527)= 187 ;
187 9 (mod527)= 187 ;
187 17 (mod527)= 187 ;
187 111 (mod527)= 187 ;
341 2 (mod527)= 341 ;
341 4 (mod527)= 1 ;
341 7 (mod527)= 341 ;
341 9 (mod527)= 341 ;
341 17 (mod527)= 341 ;
341 111 (mod527)= 341 ;
373 2 (mod527)= 1 ;
373 4 (mod527)= 373 ;
373 7 (mod527)= 373 ;
373 9 (mod527)= 373 ;
373 17 (mod527)= 373 ;
373 111 (mod527)= 373

検討した例から簡単な結論が得られます。 実際、暗号化プロセスのパラメーターの選択には非常に慎重に取り組む必要があり、そのようなパラメーターの徹底的な予備分析を実行する必要があります。 これを行う方法は別の問題であり、この作業のフレームワークでは考慮されていません。

Source: https://habr.com/ru/post/J224523/


All Articles