Linux
cat /dev/urandom 的輸出有多臨時
我在我的伺服器上使用以下命令來創建種子:
cat /dev/urandom |tr -dc A-Z9|head -c${1:-81}
如果我複制輸出然後關閉終端,創建的種子會完全無法恢復嗎?我只是擔心可能在某個時候訪問我的伺服器的人將能夠在某種歷史記錄中檢查該輸出。
來自隨機發生器的數據經過幾個地方。
- 它從核心開始。核心中的隨機生成器與任何其他隨機生成器一樣,由一個由熵源播種的確定性隨機位生成器 (DRBG) 組成。Linux 使用的 DRBG 具有回溯阻力,這意味著即使攻擊者設法在某個時間點找出 RNG 的狀態(這需要核心級訪問),他們也無法計算之前的狀態,因此他們可以t 找到以前的輸出。
- 核心不會保留它傳遞給
cat
程序或稍後通過管道傳遞的數據的副本。- 一旦
cat
程序終止,它的記憶體就會被釋放回核心。釋放的記憶體不會立即擦除:Linux 只會在將記憶體分配給程序之前擦除記憶體。cat
(這是因為在分配時擦除比在釋放時擦除具有更好的性能。)因此,終止後數據可能仍會在 RAM 中停留一段時間。獲取這些數據需要核心級別的訪問權限和一些取證技能,才能在可能數十萬候選人中找到正確的記憶體頁面。其他程序 (tr
,head
) 也是如此。- 管道不會在任何地方保存它們的記憶體。數據直接從一個程序複製到另一個程序。
- 數據顯示在終端上。它可能保存在終端仿真器的記憶體中的某個位置。只要您可以滾動回它,它肯定會被保存,並且稍後可能會在程序的記憶體中保留一個副本,具體取決於終端仿真器如何管理其記憶體。在終端模擬器的記憶體中查找數據需要訪問您的帳戶。
- 終端上顯示的數據不會儲存在文件中,除非您特意記錄了會話。
- 數據也可能保留在影片儲存器中(不是以文本形式,而是以在某個點顯示的一組像素的形式)。沒有擦除影片記憶體的機制,圖像碎片有時會保留很長時間。檢查影片記憶體需要核心級訪問。
- 如果您使用剪貼板從終端複製數據,那麼您必須擔心剪貼板數據可能儲存在哪裡。一個副本可能會在 X 伺服器的記憶體中保留一段時間,就像一個副本可能會保留在終端仿真器的記憶體中一樣。找到該副本需要根級別的訪問權限和嚴格的取證技能。
- 如果您有剪貼板管理器(可能是桌面環境的一部分),那麼您需要擔心它可能會在哪裡儲存剪貼板內容的歷史記錄。
總之,唯一的實際風險是如果您使用剪貼板管理器。