STM32開發(fā)RSA算法历恐,遞歸消耗棿绨空間結(jié)果

更新一篇簡書 ? ?STM32開發(fā)RSA算法實驗過程,同時可以估算RSA算法在MCU上開發(fā)的可行性問題研究

? ? ? ? 開篇文章像寫論文一樣弱贼,RSA算法在ARM上開發(fā)蒸苇,由于算法計算量很大,常用C語言開發(fā)的RSA算法大多用遞歸調(diào)用的方式吮旅,如果單純的硬計算的話就不要考慮ARM芯片了溪烤,因為通過計算太耗時,這個時間是做項目不能接受的庇勃。而大多數(shù)遞歸算法處理的調(diào)用簡單的說也是比較消耗資源檬嘀,遞歸函數(shù)調(diào)用之所以消耗資源是因為函數(shù)堆棧的原因,遞歸不斷調(diào)用函數(shù)本身责嚷,而一個函數(shù)在開始執(zhí)行的時候是要先入棧鸳兽,首先是形參入棧,然后是函數(shù)入棧罕拂,由于遞歸調(diào)用揍异,函數(shù)是沒有退出的全陨,相當于函數(shù)沒有退棧處理,這樣的話每次遞歸調(diào)用一次函數(shù)就消耗一部分椫灾溃空間辱姨,最后棧空間被大量消耗戚嗅,對于單片機而言導致資源不夠雨涛。這也是為什么在很多資源不是特別多的情況下我們盡量比較少的考慮遞歸的使用,但是遞歸的使用確實能減少大量計算量并使程序簡單易懂渡处。

? ? ?? 1.了解RSA算法原理镜悉,利用兩個大素數(shù)乘積成為一個更巨大的數(shù),很難被分解出質(zhì)因數(shù)的特性來進行加密解密處理医瘫。傳輸過程中將公鑰對發(fā)送給加密方侣肄,私鑰對自己保存,然后加密方通過公鑰對? 對文件進行加密醇份,通過各種傳輸?shù)阶约哼@邊稼锅,自己利用手中的私鑰對進行解密,由于其余的人不知道私鑰對僚纷,即便他們在網(wǎng)絡(luò)上截獲了你的公鑰對矩距,也截獲了你的加密文件,但是沒有私鑰對怖竭,依然無法解密锥债,這也是非對稱加密的原理。

公鑰和私鑰


?RSA算法原理以及相關(guān)例子介紹痊臭,推薦參考博客:https://www.cnblogs.com/jiftle/p/7903762.html

? ? ? 2.針對算法有部分了解后锌畸,查看算法實現(xiàn)岛抄,整理幾個C語言算法實現(xiàn):https://blog.csdn.net/haroroda/article/details/46336053纸淮,百度上都是基本的偽代碼董栽,不過針對這種代碼可以了解一下實現(xiàn)原理,但是這種算法應用相對來說不好鸦致;在github 上有很多關(guān)于C語言實現(xiàn)RSA算法:https://github.com/KONGDejing/kongdejing.rsa

? ? ? 3.支持開源項目:關(guān)于github,在我前面一篇簡書中曾經(jīng)提到過潮剪,針對github一點點想法; 瀏覽github是一件很有趣的事情。

圓明園

? ? ? 4.在STM32F407開發(fā)板上驗證算法可行性分唾,首先將算法在linux上進行驗證抗碰,然后移植到開發(fā)板上,STM32F407開發(fā)板默認的椪狼牵空間大小是0x00000400,堆空間是0x00000200改含;實際上STM32內(nèi)存大小有192K+4Kk擴展空間,驗證過程中會發(fā)現(xiàn),不同的位數(shù)質(zhì)數(shù)相乘捍壤,會造成堆棧空間不夠從而讓算法無法正常運行鞍爱,在默認的堆椌榫酰空間下,我自測發(fā)現(xiàn)只能實現(xiàn)低3位質(zhì)數(shù)相乘的大素數(shù)作為module,修改堆棧大小能夠有效增加運算的數(shù)據(jù)量睹逃。在目前MCU上開發(fā)盗扇,數(shù)據(jù)大小最長是8個字節(jié)的數(shù)據(jù),相當于二進制2的64位數(shù)據(jù)沉填,相當于十進制的數(shù)據(jù)的19位左右疗隶,對于1024位數(shù)據(jù)在mcu上是無法直接通過數(shù)據(jù)類型存儲的,這樣又需要做如何存儲這種大數(shù)據(jù)翼闹,但是這里我們不講如此大的數(shù)據(jù)存儲斑鼻,對于大多數(shù)應用場合其實經(jīng)過RSA加密后也是難以破解的,而對于long long 型數(shù)據(jù)我們質(zhì)數(shù)就有一定的限制猎荠,大小接近10億數(shù)量級坚弱。RSA在大小接近10億數(shù)量級乘積獲得module,這樣就有如何產(chǎn)生10億左右大小素數(shù)的算法关摇,相對這個算法實現(xiàn)10億大小的數(shù)據(jù)是完全有可能的荒叶,但是RSA算法其實只需要知道兩個大質(zhì)數(shù)和公鑰私鑰就行,對于產(chǎn)品開發(fā)完全可以用內(nèi)置的素數(shù)進行输虱,不需要通過MCU自行生成些楣。可以通過linux針對一部分算法進行驗證宪睹,生成兩個10億級大素數(shù)愁茁,然后通過RSA算法進行計算,目前來說大素數(shù)隨機生成方法是不存在的横堡,這是一個NPC問題埋市,NPC問題世界的七大難題之一,Miller-Rabin算法主要用途是檢驗一個大數(shù)是否是素數(shù)命贴,但是無法隨機產(chǎn)生一個大素數(shù)道宅。java中有BigInterger概念,是可以生成1024bit數(shù)量級的大素數(shù)胸蛛。針對C語言應用來說污茵,用到longlong的8個字節(jié)64bit數(shù)據(jù)就可以了。

長江行水

5.生成10億數(shù)量級的大素數(shù)需要的時間也是比較長的葬项,針對C語言而言泞当,要找出10億數(shù)量級的大素數(shù)耗時也是非常夸張的民珍,博客:https://blog.csdn.net/huang_miao_xin/article/details/51331710即便是高效一點的算法襟士,在1000W大小的數(shù)據(jù)內(nèi)找到所有的素數(shù)盗飒,運行環(huán)境,CPU-i5-3210陋桂,內(nèi)存4G逆趣,win7,vs2012時間消耗是2.5S ,10億級數(shù)據(jù)遠大于250S嗜历,因為越到后面宣渗,每個數(shù)據(jù)越來越大,每次判斷耗時越來越大梨州,所以增加耗時時間甚至幾小時痕囱。所以不建議直接通過C語言來找兩個大素數(shù),通過java來生成兩個比較大的素數(shù)還是比較容易的暴匠。直接利用java生成的素數(shù)內(nèi)置到設(shè)備端鞍恢。

水木清華

6.利用生成的素數(shù)進行RSA算法處理,在STM32中根據(jù)兩個素數(shù)和公鑰生成私鑰巷查,然后將公鑰發(fā)送給加密方對重要信息加密有序,解密方對傳輸過來的文件進行解密。這里面還有一個問題岛请,如果素數(shù)越大的話旭寿,會導致加密文件越大,因為任何一個字符加密后的數(shù)據(jù)和素數(shù)的數(shù)據(jù)類型是一致的崇败,如果一開始素數(shù)是int型數(shù)據(jù)盅称,加密后每個字符數(shù)據(jù)變成Int大小,加密文件相當于擴大4倍后室,對于longlong型素數(shù)缩膝,加密文件相當于擴大8倍。在工程應用岸霹,產(chǎn)品開發(fā)過程中需要結(jié)合能容忍的范圍疾层,因為加密問價加大的話,傳輸時間相對來說增加不止一點半點贡避,也是成倍增加痛黎。能夠直觀感受到MCU跑的不容易。

7.? 結(jié)束語刮吧,找到學習方法湖饱,勇往直前,我始終相信任何工程項目只要想去做都是能夠?qū)崿F(xiàn)的杀捻。熱愛一個事情

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載井厌,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仅仆,隨后出現(xiàn)的幾起案子器赞,更是在濱河造成了極大的恐慌,老刑警劉巖蝇恶,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拳魁,死亡現(xiàn)場離奇詭異,居然都是意外死亡撮弧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門姚糊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贿衍,“玉大人,你說我怎么就攤上這事救恨∶潮玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵肠槽,是天一觀的道長擎淤。 經(jīng)常有香客問我,道長秸仙,這世上最難降的妖魔是什么嘴拢? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮寂纪,結(jié)果婚禮上席吴,老公的妹妹穿的比我還像新娘。我一直安慰自己捞蛋,他們只是感情好孝冒,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拟杉,像睡著了一般庄涡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搬设,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天穴店,我揣著相機與錄音,去河邊找鬼焕梅。 笑死迹鹅,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的贞言。 我是一名探鬼主播斜棚,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弟蚀?” 一聲冷哼從身側(cè)響起蚤霞,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎义钉,沒想到半個月后昧绣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡捶闸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年夜畴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片删壮。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡贪绘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出央碟,到底是詐尸還是另有隱情税灌,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布亿虽,位于F島的核電站菱涤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洛勉。R本人自食惡果不足惜粘秆,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坯认。 院中可真熱鬧翻擒,春花似錦、人聲如沸牛哺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽引润。三九已至巩趁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淳附,已是汗流浹背议慰。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奴曙,地道東北人别凹。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像洽糟,于是被迫代替她去往敵國和親炉菲。 傳聞我的和親對象是個殘疾皇子堕战,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容