是否有一个好的/更好的/最好的方法来产生一个时间垫?我只想使用大约40个字符(a-z,0-9,. .!).
我想出的也许不是最好的办法,但似乎能满足我的需要。它基本上是这样运作的:
1)使用MS RNGCryptoServiceProvider服务生成随机种子
2)用我使用的所有字符的基填充数组
3)根据第一个字符的随机数和该字符之后数组中的随机数(基数40)执行“切换”。
4)暂停由另一个随机种子调用(1-5ms)确定的随机时间。
5)获得新的种子
6)根据第二个字符的随机数和该字符之后数组中的随机数(基数40)执行“切换”。
7)继续,直到所有字符被交换,在每次迭代、切换等过程中产生一个新的随机种子。
8)重复处理5,000次(可调整)
9)重复步骤3-8,000次(可调)
10)将线路写入安全位置(屏幕上、加密的拇指驱动器等)。
11)使用前面基于数组的行,重复步骤3-8,重复我想要的多次/行。
这具有重复使用旧的/新的种子(即在交换机上播种)的位置。我知道这方面存在漏洞,但是对于实际的生成方面,我想我可以定义每个周期可以运行多少个循环(如果用户想发疯,他们可以每一行做1亿到数百万个开关,并且可以将起始点调整到1亿到数百万)。更多似乎更好,但最终取决于用户。
我会把这个放出来--我的机器运行得非常快,芯片上有英特尔CPRNG。我知道这是/可能是一个安全隐患,但是我想知道,仅仅为了生成算法,这看起来是生成OTP pads的一个好方法吗?由于还有很多其他安全问题可以添加到列表中,或者明智地删除,我只是问--您需要多少钱才能制作一个OTP垫?
事先谢谢,我会纠正任何人有任何疑问的。
发布于 2016-02-09 00:05:57
抱歉,但不行。OTP需要真正的随机数。比如,/dev/random随机或更好(参见这)。如果您的随机数生成器在其名称中的任何地方都有“伪”,OTP将无法工作。
如果要使用伪随机数发送消息,请查找分组密码.
OTP要记住的是,如果一个流甚至部分是随机的,那是不够好的。如果您有100个字节的真正熵,但是算法生成一个150个字节的密钥,那么攻击者将得到50个字节的信息(其他100个字节(或更多)可能是英语中的冗余或任何您所在的编码位置,他们可以自己填写)。
OTP在有限的情况下是实用的(当它确实工作时,它是美丽和令人敬畏的)。对于一个简单的OTP的想法是打破,俄罗斯人使用OTP,但没有足够的随机密钥,所以美国能够打破它。这是在互联网之前。
猎鹿人的评论很有用。
https://security.stackexchange.com/questions/113162
复制相似问题