gpt4 book ai didi

javascript - 使用微时间作为唯一标识符的潜力

转载 作者:行者123 更新时间:2023-11-28 18:56:41 25 4
gpt4 key购买 nike

如果用户提交了一个微时间值,则服务器会话将对其进行跟踪。是否有可能像RSA样式密码一样跟踪微时间,以加密从服务器发送和接收的数据。

并且这将是自动/动态密码短语生成的可靠方法。

不知道这是否是正确的堆栈。

最佳答案

我认为这里有几个问题,因此我将在实际问题之前尝试解决它们:


  使用微时间作为唯一标识符


仅当您从未在同一微秒内生成两个标识符并且您的时间函数实际测量为微秒并且时间是单调的(始终在增加)时才起作用。这三个都是不稳定的假设。

很有可能在同一微秒内生成两个标识符。您的时间函数可能没有您认为的精度,或者数据类型所暗示的精度(例如,它可能总是返回以000结尾的值)。最后,夏令时和leap seconds之类的东西可能会使时间倒退,最终您会重复使用id。

因此,不行,将microtime作为唯一标识符在生产中不是一个好主意。


  RSA样式密码短语


RSA是一个非对称密钥加密系统。它允许各方拥有从真正的随机数派生的公钥和私钥,并以合理的安全性相互发送加密和/或签名的数据。 RSA公钥如下所示(十六进制模数):

af 46 03 ce c7 13 e6 2e 93 d8 56 91 b1 31 8d 0a 
22 c1 f0 eb 4f 5e ef 0d f6 20 32 b9 a4 4e 87 f9
d2 d2 44 51 b0 df 30 50 c9 35 4e 68 19 84 fb 98
33 aa 05 4b 7e fb 57 c5 b6 2e a8 4b 04 ca cf 5e
2e e5 9e 1b ca b7 60 c5 58 2c b0 df c4 6b 0d b1
2c 33 97 73 54 61 2b 9a 1b b1 dc 5d 10 a9 c4 c8
f7 6c e3 55 6e b5 0e 61 3b 35 24 0b 89 1e 32 a2
75 69 4e 97 40 68 ee 23 48 f2 71 9f c7 7e e2 9d
6c 22 55 36 24 64 a4 f0 b6 52 58 5a 9a 44 e7 3b
2a d5 ed 95 63 f8 1d a8 4d 45 9b 5d c2 f2 f9 74
81 06 18 d5 b1 fb b0 7e 5d 50 1f 63 5c a0 73 f5
22 b2 57 64 03 e6 b7 0f 6f b7 58 0b 57 80 56 51
65 9f f5 09 61 63 29 62 4d 30 02 3a 64 10 2d 95
b8 12 36 04 58 c5 d7 1d 95 e2 21 3c b0 b3 93 35
b2 b1 f9 6d 7e 20 66 b2 68 33 e9 50 a8 15 1e 0a
80 9a 3c 19 dd cc 79 35 a8 8c 1b 61 33 5d 12 2f


密码短语是用户通常选择的长串字母和符号,通常用于提供身份验证或生成可重复的随机数(例如,用于比特币的大脑钱包)。密码看起来像这样:

correct horse battery staple


“ RSA样式密码短语”是一个非常奇怪的表达,我不知道您的意思,但表示您可能有误解。


  用于散列从服务器发送和接收的数据


为什么要对从服务器发送和接收的数据进行哈希处理?散列意味着占用一些字节并将其以超出可识别性的可重复方式处理到无法识别的短长度。像TLS这样的安全通道可以在内部使用哈希,但是使用它的程序员应该完全看不到哈希。

也许不是散列,而是加密。加密将获取一些数据和密钥,并以只有持有密钥的人才能撤消该过程的方式对其进行处理。另一方面,哈希没有密钥,并且(希望)没有撤消的方法。这看似挑剔,但密码学又困难又微妙,需要特别注意。



除了投诉,回答您的问题。

如果我理解正确,则希望使用微秒级精度的系统时钟来生成某种密钥材料(密钥,口令,随机数或等效密钥)来保护客户端-服务器通信(散列以确保完整性,加密或类似操作) )。

这可能是有道理的,因为攻击者永远不会知道您生成密钥的确切毫秒数。数据类型相当大,大概是一个好的密钥的128位。

但是时间不是随机的。攻击者不知道确切的微秒,但他们可以猜测。如果他们知道小时,那么他们只有 60 * 60 * 1000 * 1000 = 3600000000,少于40亿种可能性。对于密码学,我们认为攻击者可以在不到一秒钟的时间内做出许多猜测。 40亿只是32位安全性,对于保护数据而言,这是微不足道的。

根据现代最佳实践,提出的解决方案:


如果您只需要唯一的标识符,则不涉及加密:使用 UUID version 4,它几乎以每种语言实现。它们在5316911983139663491615228241121378304中的碰撞几率为1,这应该足够了。但是,它们是可猜测的。
如果您需要用于加密目的的唯一/随机值(并且您是知道您在做什么的密码学家):在Linux上使用 /dev/urandom,在大多数语言中它都是CryptoRandom库。
如果要在客户端和服务器之间建立安全通道:请使用TLS。您可以很快从 StartSSLLet's Encrypt获得免费证书。我建议使用像nginx这样的代理来处理TLS / SSL,然后您可以在主应用程序中使用纯HTTP。
如果您想以其他方式安全地交换数据:请使用 NaCl library,它已移植到多种语言。它具有使用安全默认值和最新加密技术对数据进行加密和签名的功能。




这并不是要b你。只是加密很难,而您只有一次机会。所以请注意。如果您是密码学家或想了解更多信息,建议您咨询 Security community

关于javascript - 使用微时间作为唯一标识符的潜力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com