0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

技術(shù)分享 | 隨機(jī)數(shù)生成過慢導(dǎo)致系統(tǒng)阻塞怎么辦?

啟揚(yáng)ARM嵌入式開發(fā) ? 2022-08-15 09:20 ? 次閱讀

/dev/random和/dev/urandom是linux上的隨機(jī)數(shù)生成器,是個字符設(shè)備,為系統(tǒng)提供隨機(jī)數(shù)。隨機(jī)數(shù)主要應(yīng)用在加密方面,沒有加密的操作都是可預(yù)測且不安全的。

linux上隨機(jī)數(shù)的生成原理

linux上隨機(jī)數(shù)的生成原理是將系統(tǒng)的中斷信息收集起來放入熵池中,通過算法生成更多無序的數(shù)據(jù),有了大量的無序數(shù)據(jù)之后,每次獲取隨機(jī)數(shù),就會從池子中讀取指定的字節(jié)序列,而這些字節(jié)序列就是生成器生成的隨機(jī)數(shù)。

linux開機(jī)時就會伴隨著random設(shè)備的初始化,一般我們經(jīng)常會遇見這兩條log:

random: crng init done,

random: 7 urandom warning(s) missed due to ratelimiting,

這說明隨機(jī)數(shù)已經(jīng)初始化完成,可以隨時請求使用。但是在某些時候會卡在這個log很長時間,這是因為在開機(jī)時系統(tǒng)中斷不夠或程序運(yùn)行時熵不足,生成隨機(jī)數(shù)非常緩慢,導(dǎo)致阻塞,進(jìn)而導(dǎo)致無法開機(jī)、app無法正常運(yùn)行等一系列bug。

為了解決這個問題,我們可以移植一個工具對熵池進(jìn)行補(bǔ)熵,這樣隨機(jī)數(shù)生成器就會快速生成隨機(jī)數(shù),解決阻塞導(dǎo)致的一系列問題。

解決方案

解決這個問題的工具有很多,這里我們選用移植haveged工具,并使用啟揚(yáng)IAC-IMX8MM-kit開發(fā)板展示具體操作過程。

移植haveged-1.9.3

首先source我們的sdk開發(fā)環(huán)境,然后進(jìn)入到源碼內(nèi),通過configure配置makfile文件,命令如下:

./configure --host=aarch64-poky-linux --prefix=/home/ylook/haveged

配置完成后執(zhí)行make && make install命令,會在/home/ylook/haveged目錄下生成編譯完成后的二進(jìn)制文件以及相關(guān)庫文件,如下圖所示:

(注:筆者路徑有所不同,根據(jù)環(huán)境自行更改即可)

279007a6-1a5a-11ed-9ade-dac502259ad0.png

注意:

為防止錯誤,可以使用file命令檢查二進(jìn)制文件架構(gòu),保證為aarch64架構(gòu)即可。

將編譯出來的二進(jìn)制文件拷貝到板子的/usr/bin/目錄,庫文件拷貝到/usr/lib/目錄,執(zhí)行haveged --h命令,如下圖所示:

27b356a2-1a5a-11ed-9ade-dac502259ad0.png

這里就相當(dāng)于我們已經(jīng)把板子里的環(huán)境配置好了,為了能夠開機(jī)就使用該工具生成熵,所以我們需要在開機(jī)進(jìn)程中將該工具設(shè)置為自動運(yùn)行。

因為啟揚(yáng)i.MX8M Mini開發(fā)板上使用systemed工具配置相關(guān)服務(wù),所以我們需要寫一個service,然后讓它開機(jī)運(yùn)行,具體service如下:

27cc616a-1a5a-11ed-9ade-dac502259ad0.png

使用systemctl enable haveged之后重啟就會生效,可從開機(jī)log中看出,如圖所示,在很早之前初始化就已經(jīng)完成了。

27efc4e8-1a5a-11ed-9ade-dac502259ad0.png

也可以使用命令cat /proc/sys/kernel/random/entropy_avail,查看當(dāng)前熵值,在沒有haveged之前該值只有幾十幾百,而開啟之后有幾千。

281a6a90-1a5a-11ed-9ade-dac502259ad0.png

這樣,就完美解決了隨機(jī)數(shù)生成過慢導(dǎo)致系統(tǒng)阻塞的問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    317

    瀏覽量

    21061
收藏 人收藏

    評論

    相關(guān)推薦

    《DNESP32S3使用指南-IDF版_V1.6》第三十一章 RNG實驗

    如下幾個小節(jié):31.1 隨機(jī)數(shù)發(fā)生器簡介31.2 硬件設(shè)計31.3 程序設(shè)計31.4 下載驗證 31.1隨機(jī)數(shù)發(fā)生器簡介ESP32-S3內(nèi)置一個真隨機(jī)數(shù)發(fā)生器(RNG),其生成的32
    發(fā)表于 12-26 09:31

    “安徽造”量子隨機(jī)數(shù)芯片通過國家密碼管理局檢測

    近日,國家密碼管理局商用密碼檢測中心出具報告,由安徽問天量子科技公司自主研發(fā)的WT-QRNG300量子隨機(jī)數(shù)芯片通過檢測。這是國內(nèi)首家官方商密報告認(rèn)定、且已實現(xiàn)商用量產(chǎn)及產(chǎn)業(yè)化的“量子隨機(jī)數(shù)芯片
    的頭像 發(fā)表于 12-19 19:06 ?378次閱讀

    問天量子和方寸微電子聯(lián)合發(fā)布量子隨機(jī)數(shù)芯片

    近日,國家密碼管理局商用密碼檢測中心出具報告,問天量子和方寸微電子聯(lián)合自主研發(fā)的WT-QRNG300量子隨機(jī)數(shù)芯片通過檢測,這是國內(nèi)首家官方商密報告認(rèn)定、且已實現(xiàn)商用量產(chǎn)及產(chǎn)業(yè)化的“量子隨機(jī)數(shù)芯片”產(chǎn)品。
    的頭像 發(fā)表于 12-19 16:18 ?353次閱讀

    對稱加密技術(shù)有哪些常見的安全漏洞?

    對稱加密技術(shù)在實際應(yīng)用中可能面臨的安全漏洞主要包括: 實現(xiàn)不當(dāng): 錯誤的加解密實現(xiàn)、弱隨機(jī)數(shù)生成器或其他邏輯錯誤都可能導(dǎo)致安全漏洞。 漏洞利用: 利用已知的弱點(diǎn)或攻擊手段,如理論上可行
    的頭像 發(fā)表于 12-16 13:59 ?156次閱讀

    LuatOS開發(fā)之4G模組隨機(jī)數(shù)(random)|實戰(zhàn)指南

    本次學(xué)習(xí)的實戰(zhàn)是關(guān)于4G模組LuatOS開發(fā)的隨機(jī)數(shù)示例指南,希望大家有所收獲。
    的頭像 發(fā)表于 11-30 09:51 ?256次閱讀
    LuatOS開發(fā)之4G模組<b class='flag-5'>隨機(jī)數(shù)</b>(random)|實戰(zhàn)指南

    解析Air780E模組LuatOS開發(fā)的隨機(jī)數(shù)(random) 示例篇

    本文主要解析的是低功耗4G模組Air780E的LuatOS開發(fā)隨機(jī)數(shù)(random)實例,我以整理成文分享給大家。
    的頭像 發(fā)表于 11-29 20:23 ?169次閱讀
    解析Air780E模組LuatOS開發(fā)的<b class='flag-5'>隨機(jī)數(shù)</b>(random) 示例篇

    雅特力AT32 MCU的隨機(jī)數(shù)生成

    概述產(chǎn)品和生態(tài)系統(tǒng)安全性的需求比以往任何時候都更加重要。真隨機(jī)數(shù)是所有安全系統(tǒng)的核心,其質(zhì)量會影響設(shè)計的安全性。因此在沒有內(nèi)置硬件TRNG的AT32的微控制器系列中,如何提高隨機(jī)數(shù)的有
    的頭像 發(fā)表于 08-30 12:26 ?657次閱讀
    雅特力AT32 MCU的<b class='flag-5'>隨機(jī)數(shù)</b><b class='flag-5'>生成</b>

    如何在FPGA中實現(xiàn)隨機(jī)數(shù)發(fā)生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7中實現(xiàn)4位偽隨機(jī)數(shù)發(fā)生器(PRNGs)。
    的頭像 發(fā)表于 08-06 11:20 ?730次閱讀
    如何在FPGA中實現(xiàn)<b class='flag-5'>隨機(jī)數(shù)</b>發(fā)生器

    大電流一體成型電感有噪音怎么辦

    電子發(fā)燒友網(wǎng)站提供《大電流一體成型電感有噪音怎么辦.docx》資料免費(fèi)下載
    發(fā)表于 07-30 12:30 ?0次下載

    如何使用Python生成四位隨機(jī)數(shù)

    為了實現(xiàn)這些目標(biāo),Python 為我們提供了random() 模塊。random() 是一個內(nèi)置的 Python 模塊,用于生成隨機(jī)數(shù)
    的頭像 發(fā)表于 04-15 12:47 ?710次閱讀

    電容負(fù)極熔斷怎么辦

    在現(xiàn)代科技發(fā)展的時代,電容器在各個領(lǐng)域都扮演著重要的角色。然而,由于各種原因,電容器的負(fù)極可能會發(fā)生熔斷的情況。那么,當(dāng)電容器的負(fù)極熔斷時,我們應(yīng)該怎么辦呢?
    的頭像 發(fā)表于 04-10 14:15 ?556次閱讀
    電容負(fù)極熔斷<b class='flag-5'>怎么辦</b>

    TC389芯片上HSM的TRNG真隨機(jī)數(shù)功能,如何判斷其隨機(jī)能力呢?

    想咨詢一下,TC389芯片上HSM的TRNG真隨機(jī)數(shù)功能,如何判斷其隨機(jī)能力呢?有什么資料或者測試內(nèi)容嗎?
    發(fā)表于 03-05 07:20

    請問rt-thread studio如何使用硬件隨機(jī)數(shù)生成器?

    指導(dǎo)一下。 經(jīng)過查詢得知可以使用rt_hw_random_get()函數(shù)來獲取硬件隨機(jī)數(shù),請文需要做什么配置才能使用rt_hw_random_get()函數(shù)。
    發(fā)表于 02-23 08:03

    怎么辦?晶振沒有信號輸出

    怎么辦?晶振沒有信號輸出? 晶振作為電子設(shè)備中常見的元器件之一,在電子系統(tǒng)中起到時鐘信號供應(yīng)的重要作用。然而,有時我們可能會遇到晶振沒有信號輸出的問題,這會嚴(yán)重影響設(shè)備的正常運(yùn)行。本文將針對這一
    的頭像 發(fā)表于 01-25 13:51 ?1119次閱讀

    修復(fù)輥壓機(jī)軸承位磨損怎么辦

    電子發(fā)燒友網(wǎng)站提供《修復(fù)輥壓機(jī)軸承位磨損怎么辦.docx》資料免費(fèi)下載
    發(fā)表于 01-23 09:52 ?0次下載