0

「暗号化なしの安全な通信」について疑問に思っていたところ、チャフ/ふるい分けに関する RL Rivest の論文 (およびスタックでの 2 つの後続の投稿) に出くわしました。私はアマチュア プログラマーです。そのため、「自分で作成する」などは避ける必要があります。しかし、正しい考えがあるかどうか疑問に思っています。

def chopAndTag(data, key):
   salt = hashlib.sha225(str(random.randint(1000000000, 9999999999))).hexdigest()

   data = list(base64.b64encode(zlib.compress(data, 9)))
   mac = list()

   for x in range(0, len(data)): # create hmac of data
      mac.append(hashlib.sha224(str(data[x]) + str(key) + str(salt) + str(x)).hexdigest())

   return salt, mac, data

def chaffing(snum, salt):
   data = random.choice('\'aAbBcCdDeEfFgGhHjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ.,-_?=! ')
   mac = hashlib.sha224(str(data) + str(salt) + str(snum)).hexdigest()

   return data, mac

コードに関する簡単なメモ: 最終バージョンでは、暗号で保護されたランダム ジェネレーターが使用され (現在はテスト目的でのみ使用されます)、ストレートな sha224 ではなく sha224HMAC が使用されます。

簡単に言えば、メッセージが入力されます >> メッセージは、ランダムなソルト (公開) と共有シークレットを使用して MAC を持つ個々の文字に分解されます >> ランダムな MAC を持つランダムな数のランダムな文字が混合されます >> メッセージは圧縮されます圧縮して次の人に送る。

このシステムの問題点の 1 つは、メッセージを小さなパーツに分割する必要があるため、パーツのサイズによって情報が漏洩しないことです。私は間違っているかもしれませんが、それを圧縮して文字に分解することで、これで問題ないでしょうか?

上記のコードを実行するスクリプトからの出力のサンプル (および簡潔にするために含まれていない他のコード):

SALT: 3f441746966d9e3d269063b5c1b6c787fec25aa865365c60ce580ffd o:b3e7a01578c89fcff5d2eae4bb1d49a740f6ef935815d706d5e94417 6:16198f8ee137368cef98f469f97c2ceeca7a1f4a1ec0c01fc83521ec D:eb8532e15487c31efc39b1e381401c9d994a6b591ba00efc8089ced5 L:9d3124e8b9b5d5e15398c9413b8034dc9d46bb4b298840fcd54854de ,:1043a4ed6ec2316c4d2b71ad1cdba3d0b2cf13a213fc4ac1e9cabb78 K:79d97bfd0646ac10e4fdeddc4d7461ec57c6b7005fcfaf790525bf1f z:c30a80b64fc0cbbbcafee69ebfef67f3932e4db7ed67b03a8c2505b7 Q:37a8dae3c23364daf793c607b68a5ab5e1c9901242b96c652afb9482 p:b117f08b33519ca6ef74bd52f1c8cfb498ea6133e467e669fe7af7a3 [...]

4

1 に答える 1