开放式B加密:使用crypt_r散列输入的示例以及输入和最佳做法的说明

hs1rzwqc  于 2023-02-18  发布在  其他
关注(0)|答案(1)|浏览(102)

我正在努力寻找OpenWall的bcrypt实现的例子,这些例子使用crypt_gensalt_rn和crypt_r,它们还深入解释了在输入、设置等方面发生了什么,以及更普遍的加密组件。crypt和crypt_gensalt并不真正可行,因为它们不是MT安全的,所以我试图更好地理解rn、ra和r的实现。
总结:我想更好地了解
1.函数的参数是什么以及它们的用途是什么。
1.使用这些可重入函数进行密码散列的最佳加密实践是什么?如何在MT环境中安全地使用它们?因此,我不是那些只使用加密函数而不了解它们的含义和陷阱的开发人员之一。
1.在为salt生成器生成随机字节时,以下哪项是加密性强的随机字节源?
我也愿意向其他库等推荐,但它们需要准备好生产。

bq3bfh9z

bq3bfh9z1#

我试着自己解决这个问题。这是我发现的:
1a.隐窝_盐_RN:

  • prefix =前缀代码,格式为$$ ex. $2a$
  • count:你希望哈希算法运行的轮数。根据响应时间设置这个值。(例如,如果你想在1 s内完成一个哈希,那么运行一个基准测试,计算出在1 s内响应所需的轮数)
  • rbytes、nrbytes:rbytes是一组随机字节,nrbytes是上述随机字节字符数组的长度。您可以将NULL传递给rbytes,将0传递给nrbytes,以便操作系统为您获取它们(通常是最佳做法,除非操作系统不需要随机字节硬件,这可能会导致安全风险)
  • 输出,输出大小:这由每个算法单独定义。在bcrypt的情况下,它是32或crypt_ra的设置字符串的长度。对于bcrypt和许多其他算法,它以$ $ $的格式存储。1b. crypt_ra(const char *phrase,const char *setting,void**data,int *size);
  • 短语:要散列的文本
  • setting:在crypt_gensalt_rn中生成的设置字符串(即char* output)。
  • data:指向大多数linux库使用的通用crypt_struct的指针。crypt_ra将在这里分配一个你需要释放的struct。
  • size:一个整数指针,crypt_ra将该整数设置为crypt结构的长度(以字节为单位)。
  1. Ra和RN在多线程环境中是安全的。请确保如果您的服务器不支持通过硬件生成随机字节,则可能存在安全风险(已报告此问题)。将轮数设置为您希望验证密码所用的时间,而不是轮数。
    1.如果操作系统有合适的硬件,你可以使用它。否则你可以使用RNG像mersenne twister。

相关问题