PostgreSQL / dev / urandom

时间:2017-06-15 13:07:02

标签: postgresql security cryptography access-token

是否有PostgreSQL函数可以用/dev/urandom生成160位随机性?

我们想要生成一个访问令牌。

根据OAuth 2.0 Authorization Framework: 10.10. Credentials-Guessing Attacks

  

攻击者猜测生成令牌的概率(以及不打算由最终用户处理的其他凭证)必须小于或等于2 ^( - 128)并且应该小于或等于2 ^( - 160 )。

1 个答案:

答案 0 :(得分:3)

就像pozs所说,你可以使用pgcrypto contrib模块中的gen_random_bytes(int)

此函数从src/port/pg_strong_random.c调用pg_strong_random,如果返回码为false,则会抛出错误。

评论解释了pg_strong_random如何运作:

 * Generate requested number of random bytes. The returned bytes are
 * cryptographically secure, suitable for use e.g. in authentication.
 *
 * We rely on system facilities for actually generating the numbers.
 * We support a number of sources:
 *
 * 1. OpenSSL's RAND_bytes()
 * 2. Windows' CryptGenRandom() function
 * 3. /dev/urandom
 *
 * The configure script will choose which one to use, and set
 * a USE_*_RANDOM flag accordingly.
 *
 * Returns true on success, and false if none of the sources
 * were available. NB: It is important to check the return value!

您可以在PostgreSQL安装中查看include/pg_config.h,看看使用了哪个随机数源。

如果您使用的是Linux,那么您可能会使用OpenSSL作为随机源。

manual page for RAND_bytes声明:

  

RAND_bytes()将 num 加密强伪随机字节放入 buf

我没有深入研究OpenSSL源,因为这真的很痛,但基本上,如果你信任OpenSSL,你也可以信任pgcrypto