web-dev-qa-db-ja.com

データを運ぶためにノイズのハッシュを使用して、有線でノイズを送信する

すべての接続で抑圧的な邪悪な政府MITMがDPIを使用して、TLS/SSL、TOR、I2Pなどを使用しようとする試みを阻止する、非常にディストピア的な環境を想像してみてください。接続を確立するには、これらのプロトコルは最初にクリアテキストで少し通信する必要があります。ハンドシェイクパケットを識別すると、接続が閉じられます。カスタムプロトコルまたはプロトコル変更を使用してこのメ​​カニズムと戦うことは実行可能なオプションではありません。当局はネットワークフィルターを通過するすべてのものを監視し、ほぼ即座にDPIルールを新しいバージョンに適合させるためです。

ルールを作成することは事実上不可能なプロトコルを作成するというアイデアを考えていました。プレーンテキストデータ(プロトコルバージョン、暗号のリスト、公開鍵指紋、DH交換)をランダムで均一に見せるために使用できるものですが、簡単に元に戻すことができます。

私は次のオプションを考えることができます:

無限アルファベットハッシュ置換暗号

平文文字列の各オクテットは、完全にランダムなデータの大きなチャンクにマップされます。そのデータのハッシュの最初のオクテットが目的のオクテットと一致します。

ほとんどのPythonでのエンコード手順:

pool = {}
stegotext = ''

for octet in cleartext:
    while octet not in pool:
        chunk = generate_randomness(bytes=32)
        digest = calculate_hash(chunk)
        hash_octet = digest[0]

        if hash_octet not in pool:
            pool[hash_octet] = []

        pool[hash_octet].append(chunk)

    chunk = draw_and_remove_random_element(pool[octet])
    stegotext += chunk

Nバイトの入力が与えられると、結果はN * Hバイトになります。ここで、Hはハッシュ関数のサイズです。

デコード手順:

plaintext = ''

for group in split_in_groups(stegotext, group_length=H):
    digest = calculate_hash(group)
    octet = digest[0]
    plaintext += octet

ただし、計算上単純なハッシュ関数を使用する場合、MITMが各パケットのハッシュ関数を計算し、結果をフィルタリングするルールを追加することは難しくありません。これを防ぐために、PBKDF2またはscryptを使用できるため、正当な当事者にとっては、接続を受け入れたり開始したりするのに多くのリソースを必要としませんが、MITMは圧倒されます。

質問は:それは意味がありますか?大きなr値を持ち、公開されたキーを前に付けたヘッダーレスscryptを使用するよりも優れていますか?

2
toriningen

権威主義的なディストピア環境では、当局は、有害であると証明できないすべてのネットワーク送信を許可するわけではなく、デフォルトの拒否ルールを使用し、安全であると証明できる送信のみを許可します。このような環境では、HTTPやTelnetなどの既知の安全なプロトコルとして送信を偽装する必要があります。

それがなくても、提案されたプロトコルは統計的に強力な暗号化と同じです。彼らの塩に値するディストピアの権威は、暗号化のように見えるものをすべてブロックしようとしています。

4
Mark