
暗号化カードの使用は信頼できる方法ではありません! そこのコメントで正しく指摘されているように、「祖父は戦争中にこれを使用していました」...しかし、彼らはより高度な方法を使用しました。
その記事で説明されている方法は、 いかなる場合にも使用されるべきではありません(!) そして今、私はそれを証明します...
難易度とオプション
この方法を使用すると、合計で36個のテーブルが存在できます。複雑さは、1文字または数字のパスワードに相当します。 1つのパラメーターのみのテーブルの違い:左シフト[0-35]-ギャップ「a-z0-9」に等しい列数。確認できます : テーブル1は
z = (i+j -1 ) % 36
で、 2番目は
z=(i+j +9 ) % 36
。ここで、iとjは値をとります:“ a” = 0、“ b” = 1、“ c” = 2、...他の値を確認します-行の2番目のテーブルが“ s”で始まる場合でも、差は1つの定数にのみあります(一般的に数学のtzでは意味がありません) 。

最初: a + b + -1 = a(0 + 1 + -1 = 0) a + c + -1 = b(0 + 2 + -1 = 1) b + a + -1 = a(1 + 0 + -1 = 0) 2番目:

a + j + 9 = s(0 + 9 + 9 = 18) a + k + 9 = t(0 + 10 + 9 = 19) b + i + 9 = s(1 + 8 + 9 = 18) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 abcdefghijklmnopqr 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 stuvwxyz 0 1 2 3 4 5 6 7 8 9
したがって、暗号化されたパスワードとリソースの名前を知っていれば 、残りのソースパスワードは36個しかありません 。
元のテキストからの最後の例(彼以下について):

ちなみに、ここにはすぐにマイナスが表示されます。タブレットを使用するのは難しいため、間違いは避けられません。 これは、その記事の著者によって暗号化されたパスワードです。 エラーがあります-2番目の位置にある「aa」- 最初のプレートでは「9」であり、「b」ではありません。
暗号化されたパスワードを(正しく)解読します...
36個のパスワードの一部です(36個の異なるテーブルオフセットに対応し、名前は「habrahabr」です):
+5 j4mmqil7j
+4 k5nnrjm8k
+3 l6ooskn9l
+2 m7pptloam
+1 n8qqumpbn
+0 o9rrvnqco
-1 passwordp
-2 qbttxpseq
-3 rcuuyqtfr
-4 sdvvzrugs
-5 teww0svht
-1-これは目的のテーブルオフセット定数です。
はい、これは本当の「復号化」です、はい、パスワードを再起動するため、「p」の最後にプログラムを作成しました。
1つの変数(オフセット)を取得するには、パスワードからの1文字とサイト名からの1文字のみが必要です。
「暗号化された」パスワードの小さな文字は、どの文字がサイト名の母音になるかを返します(暗号強度が低下します)。
したがって、上記から、 サイトの名前がわからないが、母音がどこにあるか(暗号化されたパスワードに小さな文字が含まれる場所)がわかる場合、 (任意の文字で)= 36(プレート)* 6(母音= a、e、i、o、u、y)-216個のパスワード( サイト名を知らない! )。 少しですが、実際には以下を参照してください(「 現実 」)-おそらく1つだけです。
大きな文字は何も変更しませんが、小さくする必要があります( 複雑さを増しません )。
完了はタスクを多少複雑にしますが、上記の例ではそうではありません 。 リソース名はパスワードよりも長いため、短いパスワードが復号化されていることがわかります(暗号化されたパスワードとリソース名を知っている)。これはサイクルをさらに進めます。 ...ここでは、位置4、8、16(格子、犬)の「シンボル」のペアを除き、それについて-以下)。
最悪の場合(実際ではありません)、攻撃者は急いで入力せずに36個のパスワードを別のサイトに急ぐ必要があります。
現実 :36個のパスワードのうち、確かに、覚えている単語(!)のように見えるのは1つだけなので、実際には検索する必要さえありません。 したがって、パスワードは確実に認識されます。
キャラクター置換
「シンボル」についての余談。 著者は、4,8,16の位置で受け取ったパスワードの文字をプレート上の文字に置き換えることを提案しました。
句読点は、メソッドの別の脆弱性(パスワードの繰り返し)がなければ複雑になります。 著者は、ラテンアルファベットに対して句読点をシフトしました。 さて、これはプラスです。はい、これは複雑さのもう1つのパラメーターですが、4.8と16文字が確実に変化することを知っていれば、(サイト名「habrahabr」の長さに沿って)「pas * wor * p »最初のプレートで(これまでに私たちが知らないもの)*
ここでのトリックは、(4 + 8)= 12で「4」と同じ文字を配置することです(パスワードは円を描く-これらは両方とも「pas s(4) wordpas s 12) 「)」という単語ですが、12位では句読点は使用されませんでした!
したがって、12文字目を解読し、4文字目をすぐに認識できます。
4つの暗号化された文字と対応する句読点を知っているため、句読点のオフセットを直線的に受け取りました。 この変位から、すぐに8文字目とボーナスとして、16文字目(同じ)を学習します。 失敗!
確かに、作成者が12番目の文字を暗号化し、パスワードが7桁だった場合、それを解読していました(文字を繰り返すと4 + 7 = 13番目になります)。
「仕上げ」がある場合、これは写真を台無しにしますが、大したことはありません-ほとんどの仕上げは復号化されます(一番上の行は完全にまたはほぼ完全に、一番下の行は完全に知っています-中央の行はおそらく(!) -句読点で閉じられた2文字、しかしバスティングは保存されます-* * 36個のオプション-少し(そして、句読点が重複パスワードから回復できない文字を閉じることに成功することはまれなケースです)。
オプションはさらに悪い
2つのサイト(+これら2つのサイトの名前)で暗号化されたパスワードを知っている-元のパスワードとタブレットも完全に回復します。
大まかに言えば、方程式系として
x + Y1 + t = Z1、
x + Y2 + t = Z2
x =ソースパスワード
Y1、Y2 =リソースの名前(既知)、
tはテーブルのオフセットです。
Z1、Z2 =暗号化されたパスワード(既知)。
2つの方程式、2つの未知数-システムは線形で、xとtに関して1つの解を持ちます。
実際、両方のパスワードからの1文字とサイト名の同じ文字で十分です。 (不明な値は1つだけです-テーブルを左にシフトします)
ここでは、何も整理する必要さえありません- パスワードは確実に知られています。
おわりに
元の記事で説明されている暗号化アルゴリズムは、1(1!)文字の英数字パスワード(log 36 36 = 1)に似ています。
2つのサイトからの暗号化されたパスワードがわかっている場合、それはまったく暗号化されていません。
複雑にすることは可能ですか
ロシア語の文字と文字(独立してシフトされる)を使用してアルゴリズムを強化した場合でも、水平方向だけでなく垂直方向にもテーブルのシフトを追加し、水平方向と垂直方向の反射さえ追加すると、次のようになります:36 * 36 * 36 * 36 * 36 * 2 * 2 = 2億4000万テーブル...恐ろしいように見えますか?
実際、これは約5文字の単純な英数字のパスワードに似ています 。 「信頼性の高い」または「複雑な」(27ビットの暗号化)とはほとんど言えません。
強力な暗号化は128ビットであり、「洗練された」2億4,000万を超える140,000,000,000,000,000,000,000,000,000以上でなければなりません( 正確に ?)これは、25文字の英数字のパスワードに相当します。 (ログ36 (2 128 )= 24.75)
これを本当に「強化」できる唯一の方法は、次の場合です。
1)最初にラベルが「裏返し」になります(今は垂直に、次にこの線を指でたどる必要がありますが、垂直ストライプと水平ストライプの交点に 「暗号化された」シンボルを作成する必要があります)-これにより、再現性と予測可能性が低下します最大
2)すべてを互いに分離するために、ラテン語とロシア語の記号が一致しないように行と列を引き伸ばす必要があります。これにより、再現性と予測可能性がさらに低下します。
3)タブレットには、体内に絶対にランダムな数字、数字、記号のみが含まれます-そして、私は各セルに絶対にランダムを意味します-行のシフトはありません、
4)繰り返しなし(パスワード、サイト名)、
5)「位置」置換はありません。
ただし、このタブレットでも、長時間使用すると(すべての「タブレット」のように)深刻な攻撃に耐えることはできません。 繰り返しますが、暗号化カードの使用は信頼できる暗号化方法ではありません!
md5(「サイト+キー」)
多くの人がこの方法を推奨しています。 悪くはありませんが、改善できます。
実際、RainbowTablesに十分な容量とメモリがある場合、キーがある可能性があります。 (MA-ああああああああああああ-朱色が、しかしそこにある-唯一の毎秒1030億パスワードを整理する1台のコンピュータとすることができる-ように、例えば、«パスワード»+«habr»解読可能にし、上の10日間自宅のコンピューター)
暗号化ラウンドを行う、つまり、サイト+キーを取得して、ここでmd5(md5(md5(... so 6000 times ...... md5( 'site + key')....)を使用して6000回暗号化することをお勧めします。これは攻撃者を止めることはありませんが、深刻な速度低下を引き起こすため、攻撃は非実用的になります。KeePassがラウンドについて書いていることを(英語で) 読んでください 。
#擬似コード: k =キー+サイト for 0..6000 { k = md5(k) } 印刷k
そして、これはすでに150年の間、通常のmd5(サイト+キー)の10日間に対して解読されています。 しかし、一度でもかなり良い方法です。
完了
したがって、非常に印象的なアルゴリズムでも、完全に不安定です。
暗号化アルゴリズムの発明と実装は、暗号化を専門とする人(長年)とこの業界の他の専門家によってテストおよび承認されたアルゴリズムのみを信頼できる数少ない分野の1つです。
それにもかかわらず、パスワードを保存する最良の方法は、 KeePassなどのパスワードマネージャーです。

ヨイハジ
ハブルからの眺め