用AVR彙編語言實現AES及其優化

2020-11-23 電子產品世界

摘要 AES是美國高級加密標準算法,將在未來幾十年裡代替DES在各個領域中得到廣泛應用。本文在研究分析AES加密算法原理的基礎上,著重說明算法的實現步驟,並結合AVR彙編語言完整地實現AES加密和解密。根據AES原理,提出幾種列變化的優化算法,並根據實驗結果分析和比較它們的優缺點。

本文引用地址:http://www.eepw.com.cn/article/171759.htm

引言

隨著對稱密碼的發展,DES數據加密標準算法由於密鑰長度較小(56位),已經不適應當今分布式開放網絡對數據加密安全性的要求,因此1997年NIST公開徵集新的數據加密標準,即AES[1]。經過三輪的篩選,比利時Joan Daeman和Vincent Rijmen提交的Rijndael算法被提議為AES的最終算法。此算法將成為美國新的數據加密標準而被廣泛應用在各個領域中。儘管人們對AES還有不同的看法,但總體來說,AES作為新一代的數據加密標準匯聚了強安全性、高性能、高效率、易用和靈活等優點。AES設計有三個密鑰長度:128,192,256位,相對而言,AES的128密鑰比DES的56密鑰強1021倍[2]。AES算法主要包括三個方面:輪變化、圈數和密鑰擴展。本文以128為例,介紹算法的基本原理;結合AVR彙編語言,實現高級數據加密算法AES。

1 AES加密、解密算法原理和AVR實現

AES是分組密鑰,算法輸入128位數據,密鑰長度也是128位。用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關係如表1所列)。每一輪都需要一個與輸入分組具有相同長度的擴展密鑰Expandedkey(i)的參與。由於外部輸入的加密密鑰K長度有限,所以在算法中要用一個密鑰擴展程序(Keyexpansion)把外部密鑰K擴展成更長的比特串,以生成各輪的加密和解密密鑰。

1.1 圈變化

  AES每一個圈變換由以下三個層組成:
  非線性層——進行Subbyte變換;
  線行混合層——進行ShiftRow和MixColumn運算;
  密鑰加層——進行AddRoundKey運算。

① Subbyte變換是作用在狀態中每個字節上的一種非線性字節轉換,可以通過計算出來的S盒進行映射。

  Schange:
    ldi zh,$01;將指針指向S盒的首地址
    mov zl,r2;將要查找的數據作為指針低地址
    ldtemp,z+;取出這個對應的數據
    mov r2,temp;交換數據完成查表
    …
    ret

② ShiftRow是一個字節換位。它將狀態中的行按照不同的偏移量進行循環移位,而這個偏移量也是根據Nb的不同而選擇的[3]。

  shiftrow:;這是一個字節換位的子程序
    mov temp,r3;因為是4×4
    mov r3,r7; r2 r6 r10 r14 r2 r6 r10 r14
    mov r7,r11; r3 r7 r11 r15---r7 r11 r15 r3
    mov r11,r15; r4 r8 r12 r17 r12 r17 r4 r8
    mov r15,temp; r5 r9 r13 r18 r18 r5 r9 r13
    mov temp,r4
    mov temp1,r8
    mov r4,r12
    mov r8,r17
    mov r12,temp
    mov r17,temp1
    mov temp,r18
    mov r18,r13
    mov r13,r9
    mov r9,r5
    mov r5,temp
    ret

③ 在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式a(x)與固定多項式c(x)相乘的結果。b(x)=c(x)*a(x)的係數這樣計算:*運算不是普通的乘法運算,而是特殊的運算,即

  b(x)=c(x)·a(x)(mod x4+1)

對於這個運算

  b0=02。a0+03。a1+a2+a3

令xtime(a0)=02。a0

其中,符號「。」表示模一個八次不可約多項式的同餘乘法[3]。

    mov temp,a0;這是一個mixcolimn子程序
    rcall xtime;調用xtime程序
    mov a0,temp
    mov temp,a1
    rcall xtime
    eor a0,a1
    eor a0,temp
    eor a0,a2
    eor a0,a3;完成b(x)的計算
    …
  xtime:;這是一個子程序
    ldi temp1,$1b
    lsl temp
    brcs next1;如果最高位是1,則轉移
  next: ret;否則什麼也不變化
  next1:eor temp,temp1
    rjmp next

相關焦點

  • 利用彙編語言實現DES加密算法
    DES算法的實現一般用高級語言。關鍵詞:加密算法 DES 彙編語言目前在金融界及非金融界的保密通信中,越來越多地用到了DES算法。DES(Data Encryption Standard)即數據加密算法,是IBM公司於 1977年研究成功並公開發表的。
  • avr單片機和stm32區別與優缺點分析
    avr單片機特點:   1. avr系列沒有類似累加器A的結構,它主要是通過R16~R31寄存器來實現A的功能。通常時鐘頻率用4~8MHz,故 最短指令執行時間為250~125ns。   avr單片機缺點:   1. 是沒有位操作,都是以字節形式來控制和判斷相關寄存器位的   2. C語言與51的C語言在寫法上存在很大的差異,這讓從開始學習51單片機的朋友很不習慣   3.
  • AVR彙編初探之二《AVR的指令與彙編系統》
    學單片機那麼久了,感覺想要深入,還得看彙編語言,至少得了解單片機內部結構。本文引用地址:http://www.eepw.com.cn/article/201701/342697.htm  下面就以ATmega16為例,介紹一下AVR單片機結構和彙編語言。  AVR單片機的CPU內核結構
  • ARM中ADS環境下C語言和彙編語言混合編程及示例
    稍大規模的嵌入式程序設計中,大部分的代碼都是用C來編寫的,主要是因為C語言具有較強的結構性,便於人的理解,並且具有大量的庫支持。但對於一寫硬體上的操作,很多地方還是要用到彙編語言,例如硬體系統的初始化中的CPU 狀態的設定,中斷的使能,主頻的設定,RAM控制參數等。
  • ARM彙編程序設計之:彙編語言文件格式
    本文引用地址:http://www.eepw.com.cn/article/257046.htm10.3.1ARM彙編語言語句格式ARM(Thumb)彙編語法語句格式如下所示。彙編器在對程序進行彙編時忽略注釋。在彙編語言程序設計中,每一條指令的助記符可以全部用大寫或全部用小寫,但不允許在一條指令中大、小寫混用。同時,如果一條語句太長,可將該長語句分為若干行來書寫,在行的末尾用「\」表示下一行與本行為同一條語句。
  • 2018年自考《彙編語言程序設計》習題三
    2018年自考《彙編語言程序設計》習題三51.運算型指令的尋址和控制轉移型指令的尋址,其不同點在於(  )。A前者取操作數,後者決定程序的轉移地址B後者取操作數,前者決定程序的轉移地址C兩者都是取操作數D兩者都是決定程序的轉移地址52.
  • DSP編程技巧之24---C/C++與彙編語言的交互之-(2)從C/C++代碼調用...
    在C/C++與彙編語言混合編程的情況下,一般我們都會選擇C/C++來實現所期待的大部分功能,對於少數和硬體關聯度高(例如操作某些CPU寄存器)以及對運算的實時性要求高(例如高速、多點的FFT)的功能才使用彙編來實現,這就使得大多數情況下,C/C++與彙編的交互都是從C/C++代碼調用彙編代碼中的函數與變量,所以在此我們就來看一下這種調用的規則。
  • C語言 volatile 關鍵字在編譯優化過程中有何作用
    初學的讀者可能不怎麼關心編譯器優化的功能,但對於經驗豐富的工程師來說,掌握代碼優化是必備技能。 今天講述的話題就是關於代碼優化中,關鍵字volatile在優化過程中起到的作用。
  • 基於Verilog硬體描述語言的AES密碼算法實現
    本文所設計的密碼算法不包括密鑰發生器,所用的密鑰通過接口模塊由外部輸入,加解密運算後的數據經輸出接口輸出。AES算法模塊的總體結構如圖1所示。因此,字節代替的硬體設計決定了整個AES算法硬體實現的速度和面積。字節代替可以通過查找表和算術運算的方式得到。傳統的AES算法使用查找表方法實現字節代替,可以提高求逆速度,但由於該變換輸入的數據為8位,加密和解密所用的替換字節表不同,因此需要的選擇器和寄存器數量較多,硬體實現面積較大,故主要用於高速AES的實現。
  • 基於ADSP-BF533處理器的去方塊濾波器的實現及優化
    3 基於BF533的H.264去方塊濾波優化實現  去方塊濾波器在Blackfin BF533優化實現主要分為系統級別的優化、算法級別的優化、彙編級別的優化3個級別。  3.3 彙編級別的優化  BlackfinBF533處理器的內核支持C或C++語言,但由系統自動將C程序翻譯成彙編語言效率比較低下,因此對一些系統調用比較頻繁、耗時較多的模塊,可以用人工將其轉化成高效率的彙編語言來提高運行速度。主要通過以下幾個方面來提高程序的速度:  a) 以寄存器變量代替局部變量。
  • C語言-(第一章)程序設計和C語言
    什麼是電腦程式為了使計算機執行一系列的操作,必須實現編好一條條指令,輸入到計算機。所謂程序,就是一組計算機能識別和執行的指令。每一條指令使計算機執行特定的操作。例如,用1011011000000000讓計算機進行一次加法運算。這種計算機能直接識別和接受的二進位代碼稱為機器指令。機器指令的集合就是該計算機的機器語言。但是,機器語言與人們習慣用的語言差別很大,難以推廣使用,因此初期只有極少數的計算機專業人員會編寫電腦程式。
  • 用數據說話,R語言有哪七種可視化應用?
    R語言提供了一系列的已有函數和可調用的庫,通過建立可視化的方式進行數據的呈現。在使用技術的方式實現可視化之前,我們可以先和雷鋒網一起看看如何選擇正確的圖表類型。作者 Dikesh Jariwala是一個軟體工程師,並且在Tatvic平臺上編寫了一些很酷很有趣的程序。他用API編寫了第一版Price Discovery,雷鋒網對他所寫的這篇文章做了編譯,未經許可不得轉載。
  • 淺談avr和arm的區別
    故AVR單片機在軟/硬體開銷、速度、性能和成本諸多方面取得了優化平衡,是高性價比的單片機。   AVR單片機內嵌高質量的Flash程序存儲器,擦寫方便,支持ISP和IAP,便於產品的調試、開發、生產、更新。內嵌長壽命的EEProm可長期保存關鍵數據,避免斷電丟失。
  • C 語言這麼厲害,它自身是用什麼語言寫的?
    我們假設世界上不存在任何編譯器,先從機器語言說起,看看怎麼辦。 機器語言可以直接被CPU執行,不需要編譯器。然後是彙編語言, 彙編語言雖然只是機器語言的助記符,但是也需要編譯成機器語言才能執行,沒辦法只能用機器語言來寫這第一個編譯器了(以後就不用了)。
  • 基於混沌理論的微弱信號檢測的DSP實現
    本文構建了一優化的DSP實驗系統,把基於混沌理論的微弱信號檢測真正應用於實際的系統中。實驗表明,此系統能很好地實現微弱信號的檢測及其特性的測量,具有較高的精度和廣泛的應用前景。4 信號處理程序算法的優化按照CCS(Code composer Studio,代碼設計套件)環境下支持的優化C的方法編程,實現任務的功能後,考慮到C編譯器產生的代碼不會使用到一些特殊、高效的DSP指令,而線性彙編則使用DSP的彙編指令。
  • ARM彙編特殊符號 彙編符號引用
    時編譯器將用該串變量的數值取代該串變量,如:GBLS STR1GBLS STR2STR1 SETS 「pen.」如果$後是數字變量(與串變量區分),在彙編時編譯器將該數字變量的數值轉換成十六進位的串,然後用該十六進位的串取代$後的數字變量。如果$後是邏輯變量,在彙編時編譯器將該邏輯變量替換成它的取值(T或者F)。如果程序中需要$,則用$$來表示,編譯器將不進行變量替換。
  • AVR BootLoader應用範例
    用AVRstudio仿真elf(熔絲設定BOOTRST=0,程序基地址偏移=0x3800)時,所有SRAM變量丟失初始化,表現為put_s()的都是亂碼或不可見字符。 但如果改成應用程式(熔絲設定BOOTRST=1,沒有程序基地址偏移),則put_s()可以正常顯示2 XMODEM的結束應答(EOT/CAN)後需加 delay_ms(500)的延時(程序優化,統一寫在跳轉到用戶程序前), 否則在下面的情況將會無法正常結束XMODEM的傳輸,但其實程序已經升級成功 特殊情況:用戶程序裡面使用了串口,而且波特率較低(如9600bps
  • r語言的p值檢驗 - CSDN
    rvar = apply(rdata, 2, var) mean(rvar)結果1: [1] 8輸入2: var(rvar)結果2: [1] 32=2*81/5輸入3: library(ggplot2)p1 <- ggplot(data.frame(rvar),aes
  • ARM彙編編程基礎之四-ARM彙編偽操作
    掌握了基本的ARM彙編指令後,要寫出簡單的ARM彙編程序,還必須要掌握基本的ARM彙編偽操作(directive)。現在我們來看一個簡單的彙編程序,該程序調用子程序完成了加法操作。1 ;文件名:TEST.S2 ;功能:實現兩個寄存器相加3AREA Example,CODE,READONLY ;聲明代碼段Example4
  • C語言怎麼樣?今天聊聊C語言的發展史!
    有時候不得不說時勢造英雄,在1969~1971年之間著名的作業系統Unix從肯.湯普遜手中誕生,作為一種大型的系統性軟體來說,極其需要一種可靠的高級語言的出現(當時的低級語言指的是彙編,因為之前的作業系統是用彙編寫的)。