問題タブ [cryptanalysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
public-key - パスワードを対称鍵として使用して、暗号化された公開鍵 (RSA) を解読するにはどうすればよいですか?
対称鍵 (パスワード) で暗号化された公開鍵 (RSA) が与えられ、パスワードが弱い場合、与えられた暗号化された公開鍵のみを使用してパスワードを見つける方法はありますか。
java - 暗号解読の粒子群最適化における速度とは?
単純な置換暗号の鍵を見つけるために、暗号解読ローカル検索用の粒子群最適化アルゴリズムを実装しようとしています。
この方法がどのように機能するかの理論は理解しており、ほとんどのアルゴリズムを実装しましたが、速度を計算する方法がわかりません。
粒子クラス:
スワームクラス:
パーティクルは、私が別のアルゴリズム用に作成したアルファベット クラスの拡張であり、基本的にはスクランブル可能な 26 文字のアルファベット文字の char 配列です。粒子の「位置」(私が知る限り、それは単なるアルファベットまたは数値表現です)。
swarm クラスは自明ですが、キーが生成する英語テキストの量を表す 0 から 1 (1 が最高) のスコアでパーティクルをスコアリングするフィットネス クラスが含まれています。
このアルゴリズムの実装に出くわしました(コードはありませんが)、これらの手順を提案するvigenere暗号の鍵を見つけます:
実際の鍵を見つけるための提案されたアルゴリズム
- PSO 検索アルゴリズム パラメータの初期化
PSO パラメーターは、最初のステップで設定されます。これらのパラメーターは、粒子の数 (Np)、キーのサイズ (Nd)、反復の最大数 (Nt)、自己信頼係数 (C1)、群信頼係数 (C2)、および慣性の重み (w) で構成されます。
- 個別の鳥または個体群の初期化
a) vigenere 暗号の暗号解読の場合: 粒子の初期位置は、整数 0 から 25 までランダムに一様にサンプリングされたサイズ Nd の順列をランダムに選択することによって決定されます。 b) 以下を使用して各粒子の速度を初期化します。
vi は粒子 i の速度 vmax は最大速度、vmin は最小速度、rand は 0 から 1 の間の乱数です。
- リスト項目
各粒子の適合度関数値を計算する
a) 粒子の位置を鍵として暗号文を復号化します。b) ステップ 3 (a) で得られたテキストの適合度関数の値を見つけます。
- パーティクルの速度と位置を更新する
手順 3 で説明したように、各粒子の適合度関数の値を計算します。
数式をここに貼り付けられないようですが、426 ページで見ることができます: http://www.enggjournals.com/ijcse/doc/IJCSE13-05-05-064.pdf
java - Java で文字の頻度に基づいて char 配列の順列を作成する
HashMap
各文字の頻度を文字、整数の形式で暗号文のブロックに格納する があります。次に、マップは降順でソートされLinkedHashMap
ます。
次に、これらの頻度を既知の文字頻度のリストと比較して、暗号文字が何であるかを推測します。私が遭遇した問題は、2 つ以上の文字が同じ回数発生する場合です。
たとえば、次のようにします。
5 つの最も一般的な文字 desc として、次に暗号文の文字頻度:
その場合、 toが最も一般的であり、それに to などが続くとD
想定するのが妥当でしょう。E
B
T
文字の頻度が次の場合:
これらはすべて の次に一般的であるため、 にマップするかどうかI
、G
またはにマップする必要があるかどうかは不明です。H
A
B
私は少し行き詰まっており、頻度リストの各順列で一連の char 配列を作成する方法が必要です。char 配列で出力するには、次のようなものが必要です。
どんな助けでも大歓迎です
c - キーワードで順列を生成
山登りによって、特定の暗号の暗号解読で数億回実行される次のアルゴリズムを実装する必要があります。このアルゴリズムは、次のように、同じアルファベットの 7 文字のキー K を使用して、標準アルファベット {A,B,C,...,Y,Z} の順列を生成します。
- K = INGXNDM = {9, 14, 7, 24, 14, 4, 13} と仮定します。
- 右から左に、K1 = アルファベットの 9 桁を数えます。R に達したので、順列の最初の要素は R です: P = {R,...}
- R を使用済みとしてマークします。後で「ジャンプ」する必要があります。
- R から左に K2=14 の位置をカウントし、D に到達して使用済みとしてマークします。P={R,D,...}
- 次のカウントは 7 です。A に到達するとループし、Z が A に続くと見なされるため、W に到達します: 使用済みとしてマークします。P={R,D,W,...}
- 次のカウントは 24 で、R、D、W を飛び越えて V に到達します。
- など... K7=13 を使用した場合は、K1=9 で再起動します
- 得られた転置アルファベットは次のとおりです。 RDWVGBL ZHUKNFI PJSAMXT CQOYE
実際、解読コードに逆順列が必要です。私のコードは、使用された文字をスキップするための連鎖リストを実装しています。これは基数 0 であるため、A = 0、... Z = 25 であり、文字 i が位置 j にあることを意味する逆順列 Pinv(i)=j を返します。
2 つの質問があります。
- KeyToPermut のコードを最適化するにはどうすればよいですか? プロファイラーは明らかに、チェーン全体の for ループがボトルネックであることを示しています。リンクされたリストを回避する方法があるかもしれません...?
- 明らかに、キー スペースは 26 ではありません。しかし、はるかに小さい: 26^7 なので、26 のサブセットのみです! 生成することができます。生成された順列がどれほど具体的か知っていますか? それらは順列の既知のクラスに属していますか? たとえば、これらの順列のサイクルのパターンを(これまでのところ)特定できませんでした。
私は VS2013 と C を使用しています。プロジェクトの他の部分は CUDA コードです。(x64 プラットフォーム)
ご清聴ありがとうございました。
背景情報: 暗号で使用される暗号化スキームは、長さ 7 の 4 つの鍵 K を使用します。したがって、平文を見つけるために探索される理論的な鍵空間は 26^28、つまり 131 ビットです。メソッドは他のキーの長さを使用できます: 1 から 25 までの任意の値が機能します。
cryptanalysis - 文字列を Malbolge ソース コードとして認識するにはどうすればよいですか?
完全にゴミに見える文字列が与えられ、それが何であるかを特定するように求められたとします。暗号アナリストが一連の仮説をテストするために使用する証拠となる兆候があります。Malbolgeにそのような兆候はありますか? たとえば、次の文字列を考えてみましょう。
encryption - プレーン メッセージの暗号化されたバージョンが常に同じである場合、どのような欠陥が明らかになりますか?
「こんにちは!」などのメッセージを受け取る小さな暗号化プログラムに取り組んでいます。メッセージでプログラムを実行すると、同じ暗号化された結果「Hu8z209=yTu83tu8」が生成されます。差分解読法を使用して暗号を解読しようとすると、アルゴリズムにランダム化がないことがわかります。しかし、暗号を破るために、これは実際に何を学ぶのに役立ちますか?
c - 16 進値に依存するアルゴリズムでループする
私は c だけを学んでいて、アルゴリズムから for ループを実装しようとしています。私はそれを実装する方法がとても混乱しています。以下の私の試みを見てください。どんな助けや考えも大歓迎です.16進値に依存するループ内のループを意味します. これは、差分暗号解読アルゴリズムから来ています。
アルゴリズムに記載されているループは次のとおりです。
暗号文 C0 = (L0,R0) 暗号文 C1 = (L1,R1)
どこ
これまでの私の試み
しかし、16進値への依存を処理する方法がわかりません。後者の順序です: (0, 0), (0, 1), (1, 2), ..., (0, 255), (1, 0), ...</p>
つまり、考えられるすべての組み合わせを意味します。すべての組み合わせを検討する限り、順序は重要ではありません。