国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站開(kāi)發(fā) 招標(biāo)采購(gòu)參數(shù)愛(ài)站網(wǎng)關(guān)鍵詞

網(wǎng)站開(kāi)發(fā) 招標(biāo)采購(gòu)參數(shù),愛(ài)站網(wǎng)關(guān)鍵詞,怎么用自己的電腦做網(wǎng)站空間,java可以做微信網(wǎng)站么文章目錄 前言一、什么是SHA256?實(shí)驗(yàn)原理 二、K210的安全散列算法加速器三、實(shí)驗(yàn)過(guò)程總結(jié) 前言 K210內(nèi)置了豐富的加速器,包括神經(jīng)網(wǎng)絡(luò)處理器 (KPU),AES(高級(jí)加密加速器),APU 麥克風(fēng)陣列語(yǔ)音數(shù)據(jù)加速計(jì)算處理器,現(xiàn)場(chǎng)可…

文章目錄

  • 前言
  • 一、什么是SHA256?
    • 實(shí)驗(yàn)原理
  • 二、K210的安全散列算法加速器
  • 三、實(shí)驗(yàn)過(guò)程
  • 總結(jié)


前言

K210內(nèi)置了豐富的加速器,包括神經(jīng)網(wǎng)絡(luò)處理器 (KPU),AES(高級(jí)加密加速器),APU 麥克風(fēng)陣列語(yǔ)音數(shù)據(jù)加速計(jì)算處理器,現(xiàn)場(chǎng)可編程 IO 陣列 (FPIOA),數(shù)字?jǐn)z像頭接口 (DVP),相對(duì)于軟件可以極大的提高 AES 運(yùn)算速度,快速傅里葉變換加速器 (FFT),安全散列算法加速器 (SHA256)。
本文介紹安全散列算法加速器 (SHA256);

一、什么是SHA256?

說(shuō)到SHA256就不得不說(shuō)SHA-2,因?yàn)镾HA256是SHA-2的子集,SHA-256是當(dāng)今最常用的SHA2變體之一,因?yàn)樗哂泻芨叩陌踩院托阅?#xff1b;
SHA-2,名稱(chēng)來(lái)自于安全散列算法2(英語(yǔ):Secure Hash Algorithm 2)的縮寫(xiě),一種密碼散列函數(shù)算法標(biāo)準(zhǔn),由美國(guó)國(guó)家安全局研發(fā),由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)在2001年發(fā)布。屬于SHA算法之一,是SHA-1的后繼者。其下又可再分為六個(gè)不同的算法標(biāo)準(zhǔn),包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256;

SHA-256在當(dāng)今的加密實(shí)現(xiàn)中被廣泛使用,例如:

數(shù)據(jù)完整性 - 使用SHA-256哈希驗(yàn)證軟件更新、取證數(shù)據(jù)、備份等,以確保有效性和防止篡改。

數(shù)字簽名 - 可以對(duì)消息的哈希進(jìn)行加密,以創(chuàng)建一個(gè)驗(yàn)證發(fā)送者身份的簽名。SHA-256在這方面被廣泛使用。

用戶(hù)憑證 - 在安全存儲(chǔ)之前,密碼和其他敏感憑證會(huì)經(jīng)過(guò)類(lèi)似SHA-256的算法進(jìn)行加鹽和哈希處理。

區(qū)塊鏈 - 交易通過(guò)哈希鏈接在一起,以維護(hù)一個(gè)不可變的賬本。比特幣和其他加密貨幣使用SHA-256。

隨機(jī)數(shù)生成 - SHA-256具有強(qiáng)大的單向特性,適用于生成隨機(jī)位。

SHA-256如此普遍使用是因?yàn)樗峁┝怂俣?、安全性和易于?shí)現(xiàn)的適當(dāng)平衡,滿(mǎn)足了各種應(yīng)用的需求。

SHA-256的一些關(guān)鍵特性:

為不同長(zhǎng)度的輸入產(chǎn)生唯一的固定大小的256位散列。

相同哈希的兩個(gè)不同輸入碰撞的可能性非常小。

輸入的任何變化都會(huì)導(dǎo)致完全不同的散列。

不可逆的哈希過(guò)程無(wú)法恢復(fù)原始數(shù)據(jù)。

設(shè)計(jì)成即使對(duì)于大量數(shù)據(jù)也能計(jì)算得非???。

這使得SHA-256在驗(yàn)證系統(tǒng)中的數(shù)據(jù)完整性和真實(shí)性方面非常理想。

實(shí)驗(yàn)原理

將算法按照將常量的初始化、信息預(yù)處理、邏輯運(yùn)算三部分進(jìn)行介紹

常量初始化
SHA256算法中用到了8個(gè)哈希初值以及64個(gè)哈希常量

其中,SHA256算法的8個(gè)哈希初值如下:

h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

這些初值是對(duì)自然數(shù)中前8個(gè)質(zhì)數(shù)(2,3,5,7,11,13,17,19)的平方根的小數(shù)部分取前32bit而來(lái)

舉個(gè)例子來(lái)說(shuō),$ \sqrt{2} $小數(shù)部分約為0.414213562373095048,而
在這里插入圖片描述
于是,質(zhì)數(shù)2的平方根的小數(shù)部分取前32bit就對(duì)應(yīng)出了0x6a09e667
在SHA256算法中,用到的64個(gè)常量如下:

428a2f98 71374491 b5c0fbcf e9b5dba5
3956c25b 59f111f1 923f82a4 ab1c5ed5
d807aa98 12835b01 243185be 550c7dc3
72be5d74 80deb1fe 9bdc06a7 c19bf174
e49b69c1 efbe4786 0fc19dc6 240ca1cc
2de92c6f 4a7484aa 5cb0a9dc 76f988da
983e5152 a831c66d b00327c8 bf597fc7
c6e00bf3 d5a79147 06ca6351 14292967
27b70a85 2e1b2138 4d2c6dfc 53380d13
650a7354 766a0abb 81c2c92e 92722c85
a2bfe8a1 a81a664b c24b8b70 c76c51a3
d192e819 d6990624 f40e3585 106aa070
19a4c116 1e376c08 2748774c 34b0bcb5
391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3
748f82ee 78a5636f 84c87814 8cc70208
90befffa a4506ceb bef9a3f7 c67178f2

和8個(gè)哈希初值類(lèi)似,這些常量是對(duì)自然數(shù)中前64個(gè)質(zhì)數(shù)(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97…)的立方根的小數(shù)部分取前32bit而來(lái)。

信息預(yù)處理
SHA256算法中的預(yù)處理就是在想要Hash的消息后面補(bǔ)充需要的信息,使整個(gè)消息滿(mǎn)足指定的結(jié)構(gòu)。

信息的預(yù)處理分為兩個(gè)步驟:附加填充比特和附加長(zhǎng)度

STEP1:附加填充比特

在報(bào)文末尾進(jìn)行填充,使報(bào)文長(zhǎng)度在對(duì)512取模以后的余數(shù)是448

填充是這樣進(jìn)行的:先補(bǔ)第一個(gè)比特為1,然后都補(bǔ)0,直到長(zhǎng)度滿(mǎn)足對(duì)512取模后余數(shù)是448。

需要注意的是,信息必須進(jìn)行填充,也就是說(shuō),即使長(zhǎng)度已經(jīng)滿(mǎn)足對(duì)512取模后余數(shù)是448,補(bǔ)位也必須要進(jìn)行,這時(shí)要填充512個(gè)比特。

因此,填充是至少補(bǔ)一位,最多補(bǔ)512位。

例:以信息“abc”為例顯示補(bǔ)位的過(guò)程。

a,b,c對(duì)應(yīng)的ASCII碼分別是97,98,99

于是原始信息的二進(jìn)制編碼為:01100001 01100010 01100011

補(bǔ)位第一步,首先補(bǔ)一個(gè)“1” : 0110000101100010 01100011 1

補(bǔ)位第二步,補(bǔ)423個(gè)“0”:01100001 01100010 01100011 10000000 00000000 … 00000000

補(bǔ)位完成后的數(shù)據(jù)如下(為了簡(jiǎn)介用16進(jìn)制表示):

61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000

為什么是448?

因?yàn)樵诘谝徊降念A(yù)處理后,第二步會(huì)再附加上一個(gè)64bit的數(shù)據(jù),用來(lái)表示原始報(bào)文的長(zhǎng)度信息。而448+64=512,正好拼成了一個(gè)完整的結(jié)構(gòu)。

STEP2:附加長(zhǎng)度值

附加長(zhǎng)度值就是將原始數(shù)據(jù)(第一步填充前的消息)的長(zhǎng)度信息補(bǔ)到已經(jīng)進(jìn)行了填充操作的消息后面。

wiki百科中給出的原文是:append length of message (before pre-processing), in bits, as 64-bit big-endian integer

SHA256用一個(gè)64位的數(shù)據(jù)來(lái)表示原始消息的長(zhǎng)度。

因此,通過(guò)SHA256計(jì)算的消息長(zhǎng)度必須要小于$ 2^64 $,當(dāng)然絕大多數(shù)情況這足夠大了。

長(zhǎng)度信息的編碼方式為64-bit big-endian integer

關(guān)于Big endian的含義,文末給出了補(bǔ)充

回到剛剛的例子,消息“abc”,3個(gè)字符,占用24個(gè)bit

因此,在進(jìn)行了補(bǔ)長(zhǎng)度的操作以后,整個(gè)消息就變成下面這樣了(16進(jìn)制格式)

61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000018

邏輯運(yùn)算
SHA256散列函數(shù)中涉及的操作全部是邏輯的位運(yùn)算

包括如下的邏輯函數(shù):
在這里插入圖片描述
其中:
在這里插入圖片描述
現(xiàn)在來(lái)介紹SHA256算法的主體部分,即消息摘要是如何計(jì)算的。

首先:將消息分解成512-bit大小的塊(break message into 512-bit chunks)
在這里插入圖片描述
假設(shè)數(shù)據(jù)D可以被分解為n個(gè)塊,于是整個(gè)算法需要做的就是完成n次迭代,n次迭代的結(jié)果就是最終的哈希值,即256bit的數(shù)字摘要。

一個(gè)256-bit的摘要的初始值H0,經(jīng)過(guò)第一個(gè)數(shù)據(jù)塊進(jìn)行運(yùn)算,得到H1,即完成了第一次迭代,H1經(jīng)過(guò)第二個(gè)數(shù)據(jù)塊得到H2,……,依次處理,最后得到Hn,Hn即為最終的256-bit消息摘要。

將每次迭代進(jìn)行的映射用$ Map(H_{i-1}) = H_{i} $表示,于是迭代可以更形象的展示為:
在這里插入圖片描述
圖中256-bit的Hi被描述8個(gè)小塊,這是因?yàn)镾HA256算法中的最小運(yùn)算單元稱(chēng)為“字”(Word),一個(gè)字是32位。

此外,第一次迭代中,映射的初值設(shè)置為前面介紹的8個(gè)哈希初值,如下圖所示:

在這里插入圖片描述
下面開(kāi)始介紹每一次迭代的內(nèi)容,即映射$ Map(H_{i-1}) = H_{i} $的具體算法。

STEP1:構(gòu)造64個(gè)字(word)

對(duì)于每一塊,將塊分解為16個(gè)32-bit的big-endian的字,記為w[0], …, w[15]

也就是說(shuō),前16個(gè)字直接由消息的第i個(gè)塊分解得到

其余的字由如下迭代公式得到:
在這里插入圖片描述
STEP2:進(jìn)行64次循環(huán)

映射 $ Map(H_{i-1}) = H_{i} $ 包含了64次加密循環(huán)

即進(jìn)行64次加密循環(huán)即可完成一次迭代

每次加密循環(huán)可以由下圖描述:
在這里插入圖片描述
圖中,ABCDEFGH這8個(gè)字(word)在按照一定的規(guī)則進(jìn)行更新,其中

深藍(lán)色方塊是事先定義好的非線(xiàn)性邏輯函數(shù),上文已經(jīng)做過(guò)鋪墊

紅色田字方塊代表 mod $ 2^{32} $ addition,即將兩個(gè)數(shù)字加在一起,如果結(jié)果大于$ 2^{32} , 你 必 須 除 以 ,你必須除以,你必須除以 2^{32} $并找到余數(shù)。

ABCDEFGH一開(kāi)始的初始值分別為$ H_{i-1}(0),H_{i-1}(1),…,H_{i-1}(7) $

Kt是第t個(gè)密鑰,對(duì)應(yīng)我們上文提到的64個(gè)常量

Wt是本區(qū)塊產(chǎn)生第t個(gè)word。原消息被切成固定長(zhǎng)度512-bit的區(qū)塊,對(duì)每一個(gè)區(qū)塊,產(chǎn)生64個(gè)word,通過(guò)重復(fù)運(yùn)行循環(huán)n次對(duì)ABCDEFGH這八個(gè)字循環(huán)加密。

最后一次循環(huán)所產(chǎn)生的八個(gè)字合起來(lái)即是第i個(gè)塊對(duì)應(yīng)到的散列字符串$ H_{i} $

二、K210的安全散列算法加速器

SHA256 加速器是用來(lái)計(jì)算 SHA-256 的計(jì)算單元:

? 支持 SHA-256 的計(jì)算

? 支持輸入數(shù)據(jù)的 DMA 傳輸

對(duì)應(yīng)的頭文件 sha256.h

支持 SHA-256 的計(jì)算。

為用戶(hù)提供以下接口:

? sha256_init:初始化SHA256加速器外設(shè)。

? sha256_update:傳入一個(gè)數(shù)據(jù)塊參與SHA256 Hash計(jì)算。

? sha256_final:結(jié)束對(duì)數(shù)據(jù)的SHA256 Hash 計(jì)算。

? sha256_hard_calculate:一次性對(duì)連續(xù)的數(shù)據(jù)計(jì)算它的SHA256 Hash。

三、實(shí)驗(yàn)過(guò)程

原理很復(fù)雜,但是K210內(nèi)置了算法模塊,我們只需要簡(jiǎn)單的調(diào)用這些接口就可以快速實(shí)現(xiàn),如下實(shí)驗(yàn),事先通過(guò)https://hash.online-convert.com/sha256-generator 計(jì)算好對(duì)應(yīng)的字符串的哈希值,然后調(diào)用內(nèi)置算法,將兩者的結(jié)果進(jìn)行比對(duì),如果一致則測(cè)試通過(guò)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <encoding.h>
#include "sha256.h"
#include "sleep.h"
#include "sysctl.h"uint8_t hash[SHA256_HASH_LEN];
uint8_t compare1[] = {0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23,0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad};uint8_t compare2[] = {0x58, 0xbe, 0xb6, 0xbb, 0x9b, 0x80, 0xb2, 0x12, 0xc3, 0xdb, 0xc1, 0xc1, 0x02, 0x0c, 0x69, 0x6f,0xbf, 0xa3, 0xaa, 0xd8, 0xe8, 0xa4, 0xef, 0x4d, 0x38, 0x5e, 0x9b, 0x07, 0x32, 0xfc, 0x5d, 0x98};uint8_t compare3[] = {0x6e, 0x65, 0xda, 0xd1, 0x7a, 0xa2, 0x3e, 0x72, 0x79, 0x8d, 0x50, 0x33, 0xa1, 0xae, 0xe5, 0x9e,0xe3, 0x35, 0x2d, 0x3c, 0x49, 0x6c, 0x18, 0xfb, 0x71, 0xe3, 0xa5, 0x37, 0x22, 0x11, 0xfc, 0x6c};uint8_t compare4[] = {0xcd, 0xc7, 0x6e, 0x5c, 0x99, 0x14, 0xfb, 0x92, 0x81, 0xa1, 0xc7, 0xe2, 0x84, 0xd7, 0x3e, 0x67,0xf1, 0x80, 0x9a, 0x48, 0xa4, 0x97, 0x20, 0x0e, 0x04, 0x6d, 0x39, 0xcc, 0xc7, 0x11, 0x2c, 0xd0};
uint8_t data_buf[1000*1000];int main(void)
{uint64_t cycle;uint8_t total_check_tag = 0;uint32_t i;printf("\n");cycle = read_cycle();sha256_hard_calculate((uint8_t *)"abc", 3, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare1[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_hard_calculate((uint8_t *)"abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij", 60, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare2[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_hard_calculate((uint8_t *)"abcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefghabcdefgha", 65, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare3[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");memset(data_buf, 'a', sizeof(data_buf));sha256_hard_calculate(data_buf, sizeof(data_buf), hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare4[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");sha256_context_t context;sha256_init(&context, sizeof(data_buf));sha256_update(&context, data_buf, 1111);sha256_update(&context, data_buf + 1111, sizeof(data_buf) - 1111);sha256_final(&context, hash);for (i = 0; i < SHA256_HASH_LEN;){if (hash[i] != compare4[i])total_check_tag = 1;printf("%02x", hash[i++]);if (!(i % 4))printf(" ");}printf("\n");cycle = read_cycle() - cycle;if (total_check_tag == 1)printf("\nSHA256_TEST _TEST_FAIL_\n");elseprintf("\nSHA256_TEST _TEST_PASS_\n");printf("\nsha256 test time = %ld ms\n", cycle/(sysctl_clock_get_freq(SYSCTL_CLOCK_CPU)/1000));while(1);return 0;
}

完成代碼后進(jìn)行編譯;

cd buildcmake .. -DPROJ=sha256 -G "MinGW Makefiles"make

編譯完成后,在build文件夾下會(huì)生成sha256.bin文件。

使用type-C數(shù)據(jù)線(xiàn)連接電腦與K210開(kāi)發(fā)板,打開(kāi)kflash,選擇對(duì)應(yīng)的設(shè)備,再將程序固件燒錄到K210開(kāi)發(fā)板上。
在這里插入圖片描述
燒錄后重啟開(kāi)發(fā)板,實(shí)驗(yàn)結(jié)果如下:
在這里插入圖片描述


總結(jié)

本章學(xué)習(xí)了SHA-256算法的原理,并驗(yàn)證了K210內(nèi)置的安全散列算法加速器模塊,這使得安全散列的計(jì)算速度更快速;

http://aloenet.com.cn/news/35950.html

相關(guān)文章:

  • 網(wǎng)站怎樣做優(yōu)化調(diào)整百度公司招聘崗位
  • 國(guó)內(nèi)建網(wǎng)站知名企業(yè)網(wǎng)站制作廠(chǎng)家有哪些
  • 網(wǎng)站開(kāi)發(fā)運(yùn)用到的相關(guān)技術(shù)百度競(jìng)價(jià)推廣方案的制定
  • 網(wǎng)站制作公司上海微信引流推廣
  • 做好網(wǎng)站建設(shè)的重要性app優(yōu)化建議
  • 做壞事小視頻網(wǎng)站企業(yè)培訓(xùn)計(jì)劃
  • 泰安百度做網(wǎng)站的百度搜索熱度排名
  • 涼山網(wǎng)站開(kāi)發(fā)推廣計(jì)劃怎么做
  • dreamweaver教程做網(wǎng)站新浪網(wǎng)今日烏魯木齊新聞
  • 網(wǎng)站搭建 審查重慶搜索排名提升
  • 做代還的人都聚集在哪些網(wǎng)站怎么開(kāi)網(wǎng)店
  • 渭南做網(wǎng)站怎么免費(fèi)創(chuàng)建個(gè)人網(wǎng)站
  • 自己0基礎(chǔ)怎么創(chuàng)業(yè)seo搜索引擎優(yōu)化人員
  • 網(wǎng)站建設(shè) 北京優(yōu)化網(wǎng)站建設(shè)
  • 東莞做網(wǎng)站那家好網(wǎng)站優(yōu)化聯(lián)系
  • 做網(wǎng)站推廣費(fèi)用網(wǎng)絡(luò)推廣代理
  • 做網(wǎng)站需要學(xué)什么蘇州seo網(wǎng)站管理
  • 可以加外鏈的網(wǎng)站成都網(wǎng)站推廣哪家專(zhuān)業(yè)
  • 沈陽(yáng)建設(shè)網(wǎng)站騰訊廣告推廣平臺(tái)入口
  • 北京網(wǎng)站搭建服務(wù)商南寧百度推廣排名優(yōu)化
  • 跨境電商單頁(yè)網(wǎng)站的詳情頁(yè)怎么做的如何推廣自己成為網(wǎng)紅
  • 永川做網(wǎng)站萬(wàn)能導(dǎo)航網(wǎng)
  • 網(wǎng)站整套模板品牌整合推廣
  • 網(wǎng)站建設(shè)培訓(xùn)公司國(guó)內(nèi)比百度好的搜索引擎
  • 養(yǎng)殖場(chǎng)網(wǎng)站源碼平臺(tái)軟件定制開(kāi)發(fā)
  • 當(dāng)當(dāng)網(wǎng)網(wǎng)站系統(tǒng)建設(shè)的意義搜索引擎優(yōu)化方法包括
  • 新吳區(qū)推薦做網(wǎng)站電話(huà)2021國(guó)內(nèi)最好用免費(fèi)建站系統(tǒng)
  • 專(zhuān)為網(wǎng)站做點(diǎn)擊量網(wǎng)絡(luò)營(yíng)銷(xiāo)師工作內(nèi)容
  • 簡(jiǎn)述網(wǎng)站設(shè)計(jì)的原則在線(xiàn)外鏈工具
  • 設(shè)計(jì)參考圖網(wǎng)站龍華百度快速排名