簡體   English   中英

處理異常的Crypto.randomBytes是否對熵不足?

[英]Crypto.randomBytes handling exception do to inadequate entropy?

在該方法的文檔中,它聲明如果生成數據的熵量不足,它將拋出異常。 我的問題與熵有關。 如何生成並且可以通過提供足夠的熵來防止異常被拋出? 拋出異常會有多常見,還是未知?

crypto.randomBytes文檔:

crypto.randomBytes(size,[callback])

// async
crypto.randomBytes(256, function(ex, buf) {
  if (ex) throw ex;
  console.log('Have %d bytes of random data: %s', buf.length, buf);
});

生成加密強大的偽隨機數據。

如果沒有足夠的累積熵來生成加密強數據,則會拋出錯誤或調用帶有錯誤的回調 換句話說,即使所有熵源都耗盡,沒有回調的crypto.randomBytes也不會阻塞。

在下面的示例中,我將如何正確處理異常並仍然完全填充數組,基本上確保數組已完全填充生成的字節。 我是否只是捕獲異常並在catch塊中生成一個新數組,但是如果它也會引發異常嗎? 基本上我將如何使這段代碼100%正常工作?

var codes = [];
for(var i = 0;i < 100;i++){
     (function(i){
          crypto.randomBytes(256, function(ex, buf) {
               if (ex) throw ex;
               codes[i] = buf.toString('hex');
          });
     })(i)
}

如果沒有可用的熵,你最好的選擇是等一下再試一次。 您需要等待多長時間取決於您需要多少熵以及底層熵源如何工作。

在實踐中,我懷疑你會有任何問題。 我不知道Node.js在幕后做了什么,其他庫中的等效函數通常被實現為對OS的熵池的調用 - 例如/dev/urandomCryptGenRandom() - 或者作為從OS的熵中播種的CSPRNG池。 在任何一種情況下,你永遠不會阻止。

如果你在Linux上讀取/dev/random ,阻塞只是一個問題。 這是因為/dev/random可能在Linux上阻塞,但在其他平台上不會阻止。 如果您直接從硬件RNG讀取,也可能是一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM