SHA-512的uart verilog代码码

2016第三届物联网大会
智能后视镜产品方案对接会
中国LED智能照明高峰论坛
第三届·无线通信技术研讨会
第二届·中国IoT大会
ETFo智能安防技术论坛
移入鼠标可放大二维码
数字签名算法SHA-1的FPGA高速实现
来源:本站整理 作者:佚名日 14:10
[导读] 摘 要:随着网络的迅速发展,信息安全越来越重要,信息认证是验证收到信息来源和内容的基本技术。常用的信息验证码是使用单向散列函数生成验证码,
摘 要:随着网络的迅速发展,信息安全越来越重要,信息认证是验证收到信息来源和内容的基本技术。常用的信息验证码是使用单向散列函数生成验证码,安全散列算法SHA-1使用在是因特网协议安全性(IPSec)标准中。在设计中使用FPGA高速实现SHA-1认证算法,以PCI卡形式处理认证服务。
关键词:数字签名算法;现场可编程门阵列(FPGA);计算机安全
随着网络的迅速发展,对安全性的需要越发重要。然而,尽管网络技术进步很快,安全性问题仍然相对落后,并且在很多情况下只能靠虚拟私人网VPN和防火墙。因虚拟私人网是构建在($68.6000)外部结构上的,必须采取某些措施保证安全性问题。一种方法是使用因特网协议安全性(IPSec)标准。IPSec是一组协议,它在IP协议层提供安全保密的通信。IPSec协议有通道和传输两种通信模式,为了保证在高速通信中的数据安全,在设计中使用硬件加速来实现IPSec中的加密和认证。IPSec中的加密部分使用三重DES算法,或使用RC5、IDEA、Blowfish和CAST-128等算法作为加密手段。在IPSec协议中认证使用SHA-1和MD5单向散列函数算法实现,通过使用FPGA高速实现SHA-1消息认证算法。
SHA-1算法介绍
安全散列算法SHA(Secure Hash Algorithm,SHA)是美国国家标准和技术局发布的国家标准FIPS PUB ($0.7582),一般称为SHA-1。其对长度不超过264二进制位的消息产生160位的消息摘要输出,步骤如下。
首先填充消息使其长度恰好为一个比512的倍数仅小64位的数。填充方法是附一个1在消息后面,后接所要求的多个0,然后在其后附上64位的消息长度(填充前),使消息长度恰好是512位的整数倍。
5个32位变量,用十六进制表示初始化。然后开始算法的主循环,一次处理512位消息,循环次数是消息中512位分组的数目。
先把这五个变量复制到另外的变量中,A到a,B到b,C到c,D到d,E到e。
主循环有4轮,每轮20次操作,每次操作对a、b、c、d、e中的3个进行一次非线性运算,后进行移位和加运算,运算的过程见图1。a、b、c、d和e分别加上A、B、C、D和E,然后用下一数据分组继续运行算法。最后的输出由A、B、C、D和E级联而成。
SHA-1算法的FPGA实现
实现SHA-1算法时,用软件先对消息进行预处理,使消息长度恰好是512位的整数倍,再以FPGA实现对消息摘要计算的加速。
FPGA的编程一般用Verilog HDL或者VHDL进行,本设计采用了VHDL语言对SHA-1算法进行描述。SHA-1算法FPGA加速器实现分为两大部分,分别是80个32位临时值Wt(W0至W79)的生成,以及对32位临时值Wt循环处理生成160位的消息摘要。图2为将子分组Mj(0≤j≤15)变成80个32位Wt(Kt至W79)的电路框图,在设计时,用512位寄存器和2个多路选择器生成临时值Wt(0≤t≤79)。
图3中160位输入数据缓冲器用来放置初始数据(5个32位变量A、B、C、D和E),而F1234代表SHA-1算法中的4组非线性函数ft(X,Y,Z),根据需要用多路选择器Mux-1选择其中一个(ft(X,Y,Z)=(X∧Y)∨((X)∧Z),对于t=0至19;ft(X,Y,Z)=X臲臵,对于t=20至39;ft(X,Y,Z)=(X∧Y)∨(X∧Z)∨(Y∧Z),对于t=40至59;ft(X,Y,Z)=X臲臵,对于t=60至79),4个常数为Kt存在ROM中(即组件),32×5加法器将5个32位数相加,为加快相加的计算速度使用先行进位加法器来执行,具体连接结构见图4。
采用($108.7500)公司的($222.2000) HDL V5.1对SHA-1算法进行功能模拟,测试值和中间结果使用Crypto++中的库函数的输入值和运算结果,并使用这些测试值和中间结果对SHA-1算法的VHDL语言描述进行验证和查错,经验证的SHA-1算法的VHDL语言描述使用($233.7100)公司的ISE 4.1进行逻辑综合、映射、布局和布线,生成网表用于时序仿真,最后将bitstream文件下载FPGA器件上,完成设计开发。
FPGA的外围电路和控制软件
将SHA-1算法的FPGA实现做在PCI卡(安全性算法协处理器)上,实现协议中的安全性算法。在安全性算法协处理器中,FPGA执行加密解密操作,PIC控制器(用Zenic公司的 ZEN7201AF)作为PIC总线与协处理器的接口,SRAM存置FPGA的配置数据,配置控制器 (用($233.7100)公司的实现)输出地址和数据信号对FPGA进行配置,用Realtek公司的网络控制器RTL8019AS实现PCI卡与网络连接,协处理器的结构见图5。而FPGA的配置数据(加密算法的FPGA高速实现)放在硬盘上,通过操作系统BSD Unix 4.4中的PCI卡设备驱动程序,经由PCI总线下载到安全性算法协处理器的SRAM中,后用各种加密算法的配置数据对FPGA进行配置,实现真正“现场可编程”,各种加密解密算法都可以通过FPGA的内部配置用硬件结构实现了。
在软件控制方面,安全性算法协处理器驱动程序是通过函数Sebsw_intr()直接控制协处理器,此函数有来自网络控制器的中断和来自操作系统内核的时钟中断两个输入;Sebsw_hdr_chk()检验消息包的头部,如果发生硬件中断,Sebsw_intr()调用Sebsw_hdr_chk()函数;函数ether_input()检查接收到的数据类型,将接收到的分组加入到队列处理;函数ipinput()决定分组的最终地址,如果最终地址为本地地址,函数将分组传给更上一层软件,如果最终地址为非本地地址,则将分组传给ip_forward();函数ip_output()从收到的数据中生成IP数据包,然后Sebsw_start()将数据包传给网络控制器。软件控制结构见图6。
实验结果表明,在FPGA的频率为31.42MHz时,数据处理速度为214Mb/s,完全满足设计要求。本设计是课题“因特网协议安全性(IPSec)标准FPGA高速实现”的一部分,设计中还将包括三重DES算法、IDEA算法、高级加密标准AES等。
SHA-1相关文章
SHA-1相关下载
现在的中国厂商已经不仅仅满足于做白牌厂商,特别是在物联网、创客风潮来袭之时,都期望以之前积累的制造技术与经验抢占风口好位置,正纷纷建立起...
据悉,风力发电机根据运行特征和运行技术一般分为恒速风力发电机和变速风力发电机。恒速风力发电系统具有结构简单、成本低、过载能力强以及运行可...
创新实用技术专题
版权所有 & 深圳华强聚丰电子科技有限公司SHA-256 基于FIPS 180-4标准的 算法的verilog HDL实现 VHDL-FPGA-
238万源代码下载-
&文件名称: SHA-256
& & & & &&]
&&所属分类:
&&开发工具: VHDL
&&文件大小: 4 KB
&&上传时间:
&&下载次数: 38
&&提 供 者:
&详细说明:基于FIPS 180-4标准的SHA-256算法的verilog HDL实现-SHA-256 algorithm based on FIPS 180-4 standard verilog HDL implementation
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&SHA-256.v
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 基于FIPS 180-4标准的sha-1算法的verilog HDL实现
&[] - Jlink7 stm32(SCH + PCB + 转印图片)
包含了两个保存的网页以及原理图PCB和烧入的固件,详细的讲解了STM32的JLink。
很有参考价值
&[] - 用vhdl语言实现了rsa算法功能,位宽可调
&[] - 基于FIPS 180-4标准的sha-1算法的verilog HDL实现,分模块分别实现
&[] - 本算法基于leon2协处理器接口标准,内含testbench,在modelsim中仿真通过,在ise9.2中综合及后仿真通过。
位MIP流水线CPU设计,5 stage,代码详细,包括ALU,存储器,寄存器等,是个很不错的CPU设计
&[] - 加密芯片选择开发2 -- sha-256 理解.pdf
&[] - 安全散列函数的VERILOG实现,通过了fpga验证,在系统正可以直接当IP盒应用
&[] - Verilog的学习资料,可编程器件fpga的开发语言,有重点介绍Verilog的关键语法
&[] - RSA课程设计说明书,详细介绍各个部分的实现【图文】2-Verilog语言基础2new_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
2-Verilog语言基础2new
上传于||暂无简介
大小:1.21MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢sha512 用C实现的512位的SHA程序,在CFree上可以正确的运行 Crypt_De algrithms 加密解密 238万源代码下载-
&文件名称: sha512
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 3 KB
&&上传时间:
&&下载次数: 10
&&提 供 者:
&详细说明:用C实现的512位的SHA程序,在CFree上可以正确的运行-512 C implementation of the SHA program run correctly on CFree
&[]:文件不全
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - sha512 implementation
&[] - sha-512散列函数
sha-512散列函数
sha-512散列函数
&[] - 使用vc实现的高效的sha512算法,并通过测试能正确地计算出任意文件的哈希值,欢迎使用
&[] - 包含了 sha1 sha256 sha384 sha512 算法的代码, 其中还有测试用例
&[] - 散列算法sha-256
散列算法sha-256
散列算法sha-256
&[] - 这是一个在vc环境下编译通过的MD5算法。包含算法源代码和测试主程序。iOS开发之Objective-c的SHA224/SHA256/SHA384/SHA512加密算法的实现 - 推酷
iOS开发之Objective-c的SHA224/SHA256/SHA384/SHA512加密算法的实现
之前在博文中实现的SHA1的安全性已经满足不了用户需求,今天把SHA224/SHA256/SHA384/SHA512的实现一并附上。
SHA即Secure Hash Algorithm(安全散列算法)有多种不同位数的实现,常见的有SHA224/SHA256/SHA384/SHA512等
- (*) sha224
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA224_DIGEST_LENGTH];
CC_SHA224(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA224_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA224_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
- (*) sha256
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA256_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
- (*) sha384
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA384_DIGEST_LENGTH];
CC_SHA384(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA384_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA384_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
- (*) sha512
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA512_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
放到一起大团结
//NSString+SHA.h
#import &Foundation/Foundation.h&
#import &CommonCrypto/CommonDigest.h&
#import &CommonCrypto/CommonCryptor.h&
@interface (SHA)
-( *) sha1;
-( *) sha224;
-( *) sha256;
-( *) sha384;
-( *) sha512;
//NSString+SHA.m
#import &NSString+SHA.h&
@implementation (SHA)
- (*) sha1
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA1_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
- (*) sha224
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA224_DIGEST_LENGTH];
CC_SHA224(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA224_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA224_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
- (*) sha256
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA256_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
- (*) sha384
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA384_DIGEST_LENGTH];
CC_SHA384(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA384_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA384_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
- (*) sha512
const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
*data = [ dataWithBytes:cstr length:self.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, data.length, digest);
* output = [ stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];
for(int i = 0; i & CC_SHA512_DIGEST_LENGTH; i++)
[output appendFormat:@&%02x&, digest[i]];
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 uart verilog代码 的文章

 

随机推荐