问题标签 [secure-random]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
524 浏览

java - RHE 7 不尊重 java 安全随机种子

我手上有一个难题。我创建了一个 AES 服务来加密/解密敏感信息。AES 密钥是使用 java 的SecureRandom. 我有一个存储种子的受保护文件,并在调用服务时将种子填充到安全随机类中。

为了确保它有效,我有以下逻辑:

这里的想法是我应该能够创建两个具有相同种子的安全随机对象,并且它们都应该在调用时返回相同的值nextLong()

当我在 Windows 机器上部署我的应用程序时,它工作正常,但是当我在 RHEL 7 机器上部署它时,我得到了我的错误。

我的印象是,只要种子相同,两个实例将始终产生相同的输出。Windows 上似乎是这种情况,但当我在 RHEL 7 上测试它时,情况似乎并非如此。

我创建了这个简单的测试来验证:

在 Windows 上,每个输出都是正确的,而在 RHEL 7 上,这是错误的。

关于可能导致 RHEL 7 忽略种子的任何想法的建议?

0 投票
2 回答
762 浏览

java - Java 1.8 版能否生成与 Java 1.6 版相同的 SecureRandom 值?

我在系统身份验证系统上遇到问题。"SHA1PRNG"我们的服务器使用的是1.6版本,客户端使用的是1.8版本,在认证过程中,我们通过with生成密钥SecureRandom,代码如下:即:

问题是,我们发现客户端生成的密钥与服务器生成的密钥不同。我们累了打印出所有步骤,发现问题是由 引起的SecureRandom,即foo.setSeed("baa".getBytes());如果我们调用后foo.nextBytes(),它会给出不同的值。

因此,我们想知道是否有什么方法可以保持双方产生相同的值?(鉴于客户端和服务器中的 Java 版本都不能更改。)或者SecureRandomJava 中是否有任何独立于平台的方法?

背景信息: SERVER 和 CLIENT 在 Unix 中运行。我有一个运行 Java 1.8 的桌面,并且我测试了以下内容:

  1. Desktop Java 1.8 可以加密和解密 CLIENT (Java 1.8) 中生成的密钥

  2. CLIENT (Java 1.8) 不能加密或解密 SERVER (Java 1.6) 中生成的密钥,反之亦然。

  3. CLIENT 已安装 Java 1.6(仅用于测试)无法加密或解密在 SERVER(Java 1.6)中生成的密钥。我们猜测是因为/dev/random/dev/urandom已被覆盖到 Java 1.8 版本。因此,即使 Java 的版本相同,它们也有不同的行为。

0 投票
2 回答
554 浏览

java - SecureRandom setSeed 方法在 MacOS 上失败

运行 macOS High Sierra 10.13.5 和 Java 1.8.0u171。

我有类似以下代码的内容:

每次运行时都会遇到以下异常,我已经编辑了一些包含一些敏感位的堆栈跟踪:

似乎它正在尝试写一些东西,但我不知道是什么,或者在哪里。该区域中有提到 /dev/random 的代码,所以我想我会检查它的烫发,但我也不知道该怎么做。

任何想法是什么问题,我能做些什么来解决它?

编辑:我发现它似乎NativePRNGNonBlocking试图访问/dev/urandomOSX 显然不允许写入的内容。有没有办法可以写入它,或者在保持非阻塞行为的同时避免这种情况的另一种方法?

0 投票
1 回答
532 浏览

java - Java:使用 DRBG SecureRandom 时如何设置随机数?

Java 9 引入了一个名为 DRBG 的新 SecureRandom。我想用它来确定性地生成随机数。问题是它在内部使用了一个随机数,它总是在变化,所以我没有为相同的种子得到相同的数字。它确实有一个内部选项来设置该随机数,但我找不到任何可以实现这一点的公共方法。我怎样才能改变那个随机数?

0 投票
2 回答
3517 浏览

java - 跨站点历史操作(Checkmarx)

有谁知道如何修复 Checkmarx 漏洞——基于 Java 的应用程序的跨站点历史操作?这是 Checkmarx scan 提供的描述——“该方法可能会泄漏服务器端条件值,从而使用户能够从另一个网站进行跟踪。这可能构成侵犯隐私。”

以下是相关代码:

谷歌搜索后,我发现了一些 Checkmarx 文档,建议在重定向 url 中添加一个随机数。这是文档的链接:https ://www.checkmarx.com/wp-content/uploads/2012/07/XSHM-Cross-site-history-manipulation.pdf

例如:

我尝试了这种方法,但 Checkmarx 扫描仍然显示相同的漏洞。不知道为什么。

0 投票
1 回答
941 浏览

java - 如何在java中生成所有可能的64位随机值?

Java 是否SecureRandom.nextLong()返回所有可能的值,因为它继承自Random仅使用 48 位?如果没有,我是否仍然可以在 Java 中通过修改 Random 类来做到这一点以及如何做到这一点?我只想使用一个全随机长数生成器,如果可能的话,可以返回所有可能的长值。

0 投票
2 回答
351 浏览

java - 我在哪里可以获得可靠的熵源(真正的随机性字节 [])?

目前,我正在寻找一种方法来提高我的应用程序(纸牌游戏)中的随机性质量。Android以前,估计对于我的情况(52!排列)至少需要 226 位熵(226 随机位)。

我打算用它byte[]作为种子SecureRandom

问题是——我在哪里可以可靠地获得这个数量(至少 226 位)的随机位Android,最好不需要任何权限并且没有互联网。此外,无论设备和 API 级别如何,它都应该可以工作。

0 投票
1 回答
613 浏览

java - 生成可预测的安全随机数

如何实例化一个可预测且安全的随机数生成器,它将在 Java 版本和操作系统中生成一致的随机数?

以下代码曾经在 Java 8 中工作,但在 Java 10 中不再工作:

在 Java 8 中——很好,不同的随机对象生成相同的随机数:

在 Java 10 - 糟糕,不同的随机对象生成不同的随机数:

0 投票
1 回答
108 浏览

java - 如何正确使用字节数组中的 SecureRandom 输出?

我正在尝试使用 SecureRandom 生成随机密钥,但是在将输出放入字节数组时遇到了问题。它无法识别 SecureRandom 的输出。

我将输出硬编码为字节数组:

我得到的错误是:

我想用它作为用 AES 加密消息的密钥

0 投票
2 回答
1844 浏览

java - 重用 java.util.Random 实例与每次都创建一个新实例

标题几乎总结了它 - 我们可以创建一个java.util.Random(or SecureRandom) 的实例并在每次需要随机值时使用它,或者我们可以每次按需创建一个新实例。想知道哪一种是首选方式,为什么?

给出一些关于上下文的想法:随机值是在 HTTP 请求处理程序中生成的,每个请求一个,考虑到多线程,我正在寻找安全性和性能的最佳组合。