0

我想知道“没有加密的安全通信”,并偶然发现了 RL Rivest 关于 chaffing/winnowing 的论文(以及堆栈中的两个后续帖子)。我是一名业余程序员 - 因此应该避免“自己动手”等。但我想知道我是否有正确的想法:

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

关于代码的快速说明:在最终版本中,将使用加密安全随机生成器(当前仅用于测试目的)和 sha224HMAC,而不是直接的 sha224。

简单地说:输入消息>>消息使用随机盐(公开共享)和共享秘密分解为带有MAC的单个字符>>随机数量的随机字母与随机MAC混合>>消息被压缩压缩并发送给下一个人。

现在这个系统的问题之一是消息必须被分成如此小的部分,以至于这些部分的大小不会泄漏任何信息。我可能是错的,但是通过将其压缩并分解为字符,这可以吗?

运行上述代码的脚本的输出示例(以及为简洁起见未包括的其他代码):

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

4

1 回答 1

1

看看PyCrypto中的实现

于 2015-04-14T14:06:57.783 回答