我想知道"没有加密的安全通信"并且偶然发现了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 [...]