中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網(wǎng)站開發(fā) 招標采購參數(shù)愛站網(wǎng)關(guān)鍵詞

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

文章目錄

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


前言

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

一、什么是SHA256?

說到SHA256就不得不說SHA-2,因為SHA256是SHA-2的子集,SHA-256是當今最常用的SHA2變體之一,因為它具有很高的安全性和性能;
SHA-2,名稱來自于安全散列算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼散列函數(shù)算法標準,由美國國家安全局研發(fā),由美國國家標準與技術(shù)研究院(NIST)在2001年發(fā)布。屬于SHA算法之一,是SHA-1的后繼者。其下又可再分為六個不同的算法標準,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256;

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

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

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

用戶憑證 - 在安全存儲之前,密碼和其他敏感憑證會經(jīng)過類似SHA-256的算法進行加鹽和哈希處理。

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

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

SHA-256如此普遍使用是因為它提供了速度、安全性和易于實現(xiàn)的適當平衡,滿足了各種應用的需求。

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

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

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

輸入的任何變化都會導致完全不同的散列。

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

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

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

實驗原理

將算法按照將常量的初始化、信息預處理、邏輯運算三部分進行介紹

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

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

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

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

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

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個哈希初值類似,這些常量是對自然數(shù)中前64個質(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而來。

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

信息的預處理分為兩個步驟:附加填充比特和附加長度

STEP1:附加填充比特

在報文末尾進行填充,使報文長度在對512取模以后的余數(shù)是448

填充是這樣進行的:先補第一個比特為1,然后都補0,直到長度滿足對512取模后余數(shù)是448。

需要注意的是,信息必須進行填充,也就是說,即使長度已經(jīng)滿足對512取模后余數(shù)是448,補位也必須要進行,這時要填充512個比特。

因此,填充是至少補一位,最多補512位。

例:以信息“abc”為例顯示補位的過程。

a,b,c對應的ASCII碼分別是97,98,99

于是原始信息的二進制編碼為:01100001 01100010 01100011

補位第一步,首先補一個“1” : 0110000101100010 01100011 1

補位第二步,補423個“0”:01100001 01100010 01100011 10000000 00000000 … 00000000

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

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

為什么是448?

因為在第一步的預處理后,第二步會再附加上一個64bit的數(shù)據(jù),用來表示原始報文的長度信息。而448+64=512,正好拼成了一個完整的結(jié)構(gòu)。

STEP2:附加長度值

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

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

SHA256用一個64位的數(shù)據(jù)來表示原始消息的長度。

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

長度信息的編碼方式為64-bit big-endian integer

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

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

因此,在進行了補長度的操作以后,整個消息就變成下面這樣了(16進制格式)

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

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

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

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

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

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

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

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

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

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

也就是說,前16個字直接由消息的第i個塊分解得到

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

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

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

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

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

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

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

Kt是第t個密鑰,對應我們上文提到的64個常量

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

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

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

SHA256 加速器是用來計算 SHA-256 的計算單元:

? 支持 SHA-256 的計算

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

對應的頭文件 sha256.h

支持 SHA-256 的計算。

為用戶提供以下接口:

? sha256_init:初始化SHA256加速器外設。

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

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

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

三、實驗過程

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

#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;
}

完成代碼后進行編譯;

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

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

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


總結(jié)

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

http://www.risenshineclean.com/news/35950.html

相關(guān)文章:

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