使用Chaffing / Winnowing(python)保护消息

时间:2015-04-14 11:44:46

标签: python communication data-security

我想知道"没有加密的安全通信"并且偶然发现了R.L. Rivest关于翻边/风选的文章(以及此后两个帖子的堆叠)。我是业余程序员 - 因此应该避免"滚动我自己的"但我想知道我是否有正确的想法:

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的随机数随机字母在>>中混合。消息被压缩并压缩并发送给下一个人。

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

在代码上面运行脚本的输出示例(为简洁起见,不包括其他代码):

  

盐:3f441746966d9e3d269063b5c1b6c787fec25aa865365c60ce580ffd   ○:b3e7a01578c89fcff5d2eae4bb1d49a740f6ef935815d706d5e94417   6:16198f8ee137368cef98f469f97c2ceeca7a1f4a1ec0c01fc83521ec   d:eb8532e15487c31efc39b1e381401c9d994a6b591ba00efc8089ced5   L:9d3124e8b9b5d5e15398c9413b8034dc9d46bb4b298840fcd54854de   ,:1043a4ed6ec2316c4d2b71ad1cdba3d0b2cf13a213fc4ac1e9cabb78   K:79d97bfd0646ac10e4fdeddc4d7461ec57c6b7005fcfaf790525bf1f   Z:c30a80b64fc0cbbbcafee69ebfef67f3932e4db7ed67b03a8c2505b7   问:37a8dae3c23364daf793c607b68a5ab5e1c9901242b96c652afb9482   电话号码:b117f08b33519ca6ef74bd52f1c8cfb498ea6133e467e669fe7af7a3   [...]

1 个答案:

答案 0 :(得分:1)

查看implementation中的PyCrypto