いくつかの銀行カード、ドアエントリーキーコード、またはその他の小さな数値パスワードを覚えておくと、最終的には煩わしさになります。私のために最悪の事態は、私が青い月に一度使用するビジネスアカウントのための銀行カードです。私はおそらく5年で8回使っていました、そして、彼らは私に新しいPINを持つ新しいカードをくれました。はぁ。
早く、私のPINは何ですか?
普通の人はピンの急増にどのように対処しますか?彼らは一枚の紙の上の数字を書き留めて、それを彼らの財布に保ちます。私たちは皆、それがどのように終わるかを知っていますか?失われた財布と複数の空の銀行口座。ハッカーはそれをどのように処理しますか?カード自体に各数を書き留めますが、自然に暗号化され、自然に唯一の壊れやすい暗号化方式があります。ワンタイムパッド(OTP)。
OTPは暗号化方法の間で奇数アヒルです。彼らはあなたの頭の中で復号化されることを意図していますが、秘密の鍵が安全のままである限り、彼らは堅実です。通常の暗号化方式でオンになるSボックスをコーディングしようとしたことがある場合は、OTPSは豊かにシンプルです。トレードオフは「長い」キーですが、OTPはあなたのピンを暗号化するのに絶対に完璧です。
この記事の最初の部分は、他の場所に入るが絶望しないで、それはOTPへのバックドアの紹介であるというフレンドリーな「ライフハック」パブラルであるようです。 2番目の半分は、いくつかの深い暗号化直感、いくつかのフレンドリーな数学、そしてうまくいけば、暗号化されたピンを書き留める説得力のある議論があることが正しいことです。途中で、OTPを実装するときにあなたが間違っていることができる3つのことをリストします。 (そしてそれらのどれもあなたに衝撃的なものではありません!)しかし、最後に、私のPIN暗号化ソリューションは3つのうちの1つを壊し、それにかかわらずは依然として残っています。まだ好奇心がありますか?読む。
PINソリューション
だから最初に銀行カードの問題を解決する:あなたのピンを暗号化したあなたのPINをあなただけが知っている秘密を書いてください。新しいカードごとに4桁の数字を覚えておく必要があるのではなく、永久に1つの4桁の数字が必要です。このキーは、銀行預け払いのウィンドウでPINを入力するように求められたときに不思議に見えないようにしてください。これはOTPの古典的な使用です – あなたがあなたの頭の中で元に戻すことができる暗号化です。
まず、秘密の4桁の数字をランダムに選択してください。その後、PINからその番号を差し引き、結果をカードに書き込みます。銀行窓口の前に立っているときは、カードを見下ろして秘密番号を追加してください。窓口はあなたがカードにあなたのピンを書いたと思います。壊れやすい暗号化方式を使用したので、Smugを気分かないように感じます。
通常の加算と減算の代わりに、桁数を横切って持ち運びが行われ、MODULO-10 MATHを使用したいと思います。私たちはなぜ以下のように話しますが、今のところ、ここでは機能しています。
PINが1234であるとします。 – そして私のランダムな秘密数は当然1337です。暗号化しましょう。 1から1を差し引くとゼロがゼロになりますので、その下に書きます。 2から3を減算すると-1が与えられます。これはModulo-10演算が入ってくる場所です。この場合、-1は10を加えることによって9に変わります。 3 – 3 = 0、4 – 7 = 7、MOD-10。私のカードは今では0907を書いています。
今復号しましょう。カードを見下ろして、私は0を見て1を追加します。先頭の1Sをドロップしてください。)0 + 3 = 3,7 + 7 = 14 – > 4 <。 1234年に入力し、お金は私のものです! 他の番号に秘密番号を追加するのがハングアップしたら、桁ごとのMOD-10に驚くように機能するかが驚くようになります。試してみて、10分以内にお手伝いします。 ワンタイムパッド ワンタイムパッドは両方とも最も単純な対称暗号化方式であり、また完全に壊れない可能性があります。それは3つの重要な特徴を持っています、そのうち2つは上で実証され、彼らの間違ったものを手に入れることは壊滅的なものになることができます。 OTPの最も重要な機能は、パスワードがランダムで、暗号化されたテキストと同じ長さである必要があるため、ピンの4桁の秘密が必要です。 OTPでは、すべてが秘密の周りを旋回します。 4桁の数字では、4桁の秘密を維持することは問題ありません。しかし、あなたが友人にあなたの休暇の暗号化された写真のギガバイトを送りたいと想像してください。それは手元と秘密を保つための重要な素材です。 [Matt_Crypto]、Public Domainsecond、メッセージを秘密と組み合わせる方法は、暗号化された文字と平文文字のセットのセットがモジュロ算術演算と似ている必要があります。一対一MOD-10はこれを容易に保証します。両方が0から9の範囲です。多分あなたはバイナリデータのXOR演算子を使うことに精通しています。ONまたは減算、MOD-2。 (0 + 0 = 0,1 + 1 = 1,1 + 0 = 1,1 + 1 = 2 - > 0は、文字を使って「z」の周囲にあるCAESAR暗号のようにアルファベットを包みます。またはrot13。アルファベットを数字にマッピングして数学MOD-26を実行するだけです。
3つ目、そして、これは最初の推論です、あなたはワンタイムパッドで秘密を再利用してはいけません。これは暗号化方法の名前でさえあるので、これは明らかだと思っていますが、実際にはするのは難しいです。そして実際、私のPIN-暗号化方式は、複数のキーにまたがって同じシークレットを使用してこのルールを分割します。私たちはすぐにそれに入ります。
完璧な暗号化をめちゃくちゃにします
OTPが壊れないのはなぜですか?ほとんどの暗号化スキームを破ることは、確率と統計に似ています。たとえば、上記のCAESAR暗号を使用してテキストを暗号化した場合、平文の各文字は、暗号文で発生するたびに別の単一文字にマッピングされます。元のテキストが英語であることを知っている場合、最も一般的に使用されている文字が “e”である場合は、「q」が暗号文の最も一般的な文字である場合、それは “e”を表します。つまり、平文と暗号文の間の統計的類似性を見つけ、2つの間の橋渡しをするために使用します。
平文限定の秘密鍵を使用して、ランダムに選択された場合は、暗号文と統計的な関係を解消します。マイカードに書き込まれた特定の暗号文が与えられた場合、0000から9999までのピンは可能であり、キーがランダムに選択された場合は等しくおそれがあります。暗号文の平文についての情報はありません – それは本質的にShannonの証明(絶対的な古典的なPDF)が一言である。そしてそれがOTPが壊れない理由です。
Dianaワンタイムパッド[米国NSA]、Public Domainthisは、実際には暗号化の分野を理解するための鍵です。平文の統計的に関連するトレースは残ります。短い鍵に対するこの願望は便利されているだけではありません。この記事をダウンロードして読んでください。ゲストのために書き留める必要があるWiFiパスワードの長さを想像してみてください。これはOTPが些細で興味がないという意味です – それは壊れないかもしれませんが、秘密はほとんどのアプリケーションでは長すぎるだけです。実際の暗号は、最小の重要な素材と統計的な関係を破るアルゴリズムを見つけることです。
それを念頭に置いて、短いまたは非ランダムなパスワードを使用してOTP実装を締め付けることができます。パスワードとして1を使用して必要に応じて繰り返してみてください。私たちの暗号文は2345を読んで、ピンは2番目の試みで推測されます。ランダムなパスワードを使用したいのです。ピッキング0000それは数学を簡単にしますので、上記よりも悪いのは簡単です。 (厳密に言えば、私が0000,1111,9999,1234,4321、または類似している場合は再ロールします。とにかく、あなたの誕生日を使わないでください。幼年期の友達の古い電話番号が受け入れられるかもしれません。
モジュロ算術演算の役割はもう少し微妙です。どの関数が使用されているものがすべて、平文の可能な文字のセットは暗号文と1対1をマッピングする必要があります。なんで? MOD-10追加の代わりに単純な追加を使用したと想像してください。 PIN暗号文の最後の桁を取得するには、4 – 7 = -3 – > 7を使用し、7 + 7 = 14 – > 4を復号しました。 ‘tは6より大きいので、最大値を追加するので、6の場合にのみ6を与えます。
そしてそれは最後にめちゃくちゃになったことを残します:「1回限りの」パッドを再利用してください。明らかなね?違う。
Lorenz Machine、パブリックドメイン
一方では、再利用は明確な責任です。非常に似た暗号化スキームでパスワードを再利用すると、WWIIの重要なコードである「Thanny」が「Tunny」を破った。 4,000文字の暗号化されたメッセージが送信されましたが正しく受信されませんでした。送信者は、同じ秘密でメッセージを再送信しましたが、さまざまな略語などを使用して、テキストに小さな変更を加えました。これにより、TunnyとReverse Engineerが暗号化されたマシンを破るのに十分な同盟国を与えました。ゲームオーバー。
これはチュニーを復号化した数学です。メッセージAとBを秘密鍵Cとともに符号化すると、誰かが両方とも走査されている場合、それらはそれらをまとめて(MOD C)MOD(B MOD C)=(A MOD B)MOD C MOD C = A MOD B、ここで、MODは現在に使用されているビット単位または数値モジュロ演算子です。バイナリモジュロを取ることはそれ自身の逆になるので、結果は平文の両方に関連し、秘密鍵とは無関係のものです。
ここから、AとBのスマートな推測を比較し、A MOD Bの結果と比較すると、コードが破損する可能性があります。したがって、両方のテキストに「攻撃」が表示されていることをよく確信しているのであれば(暗号タイプは常に夜明けで「攻撃を暗号化されます」)、その後、MOD Bと一致するまで、異なる位置にある「攻撃」を異なる位置にまとめて試すことができます。
驚きの終わり
しかし、これが最後のひねりです! 上記の数学にもかかわらず、私達の銀行カード全体で秘密鍵を再利用することができます。 なんで? ピン自体がランダムであるためです。 Wartimeの間に送信された自然言語メッセージとは対照的に、aとbの両方がランダムピンである場合、mod bはmod cと同じくらいランダムです。
だから、ハッカーがピンを覚えている方法:ワンタイムパッドについて多くを学ぶことによって、それを壊す方法、そしてそれが保護する必要があるメッセージが短い場合にはそれがどのように役立ちますか。 そして、特定のメッセージについては、ルールを破ることさえできます。