什么是安全散列算法SHA256?

http://8btc.com/article-136-1.html

发布者: 无主之地 发表于: 2013-10-1 01:31

78152 2 分享
 
安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。下面以 SHA-1为例,介绍该算法计算消息摘要的原理。

 
对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。

  SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。

  一、术语和概念

  (一)位(Bit),字节(Byte)和字(Word)

  SHA1始终把消息当成一个位(bit)字符串来处理。本文中,一个“字”(Word)是32位,而一个“字节”(Byte)是8位。比如,字符串“abc”可以被转换成一个位字符串:01100001 01100010 01100011。它也可以被表示成16进制字符串:0x616263.

  (二)运算符和符号

  下面的逻辑运算符都被运用于“字”(Word)

  X^Y = X,Y逻辑与

  X \/ Y = X,Y逻辑或

  X XOR Y= X,Y逻辑异或

  ~X = X逻辑取反

  X+Y定义如下:

  字 X 和Y 代表两个整数 x 和y, 其中0 <= x < 2^32 且 0 <= y < 2^32. 令整数z= (x + y) mod 2^32. 这时候 0 <= z < 2^32. 将z转换成字Z,那么就是 Z = X + Y.

  循环左移位操作符Sn(X)。X是一个字,n是一个整数,0<=n<=32。Sn(X)= (X<<n)or(x>>32-n)

  X<<n< span="">定义如下:抛弃最左边的n位数字,将各个位依次向左移动n位,然后用0填补右边的n位(最后结果还是32位)。X>>n是抛弃右边的n位,将各个位依次向右移动n位,然后在左边的n位填0。因此可以叫Sn(X)位循环移位运算

  二、SHA1算法描述

  在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。SHA1算法只接受位作为输入。假设我们对字符串“abc”产生消息摘要。首先,我们将它转换成位字符串如下:

  01100001 0110001001100011

  ―――――――――――――

  ‘a’=97 ‘b’=98‘c’=99

  这个位字符串的长度为24。下面我们需要5个步骤来计算MD5。

  (一)补位

  消息必须进行补位,以使其长度在对512取模以后的余数是448。也就是说,(补位后的消息长度)%512 = 448。即使长度已经满足对512取模后余数是448,补位也必须要进行。

  补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448。总而言之,补位是至少补一位,最多补512位。还是以前面的“abc”为例显示补位的过程。

  原始信息:01100001 01100010 01100011

  补位第一步:0110000101100010 01100011 1

  首先补一个“1”

  补位第二步:0110000101100010 01100011 10…..0

  然后补423个“0”

  我们可以把最后补位完成后的数据用16进制写成下面的样子

  61626380 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 00000000

  现在,数据的长度是448了,我们可以进行下一步操作。

  (二)补长度

  所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个64位的数据来表示原始消息的长度。如果消息长度不大于2^64,那么第一个字就是0。在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)

  61626380 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 0000000000000000 00000000

  00000000 0000000000000000 00000018

  如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。

  (三)使用的常量

  一系列的常量字K(0),K(1), ... , K(79),如果以16进制给出。它们如下:

  Kt = 0x5A827999 (0<= t <= 19)

  Kt = 0x6ED9EBA1 (20<= t <= 39)

  Kt = 0x8F1BBCDC (40<= t <= 59)

  Kt = 0xCA62C1D6 (60<= t <= 79).

  (四)需要使用的函数

  在SHA1中我们需要一系列的函数。每个函数ft (0 <= t <= 79)都操作32位字B,C,D并且产生32位字作为输出。ft(B,C,D)可以如下定义

  ft(B,C,D) = (B ANDC) or ((NOT B) AND D) ( 0 <= t <= 19)

  ft(B,C,D) = B XOR CXOR D (20 <= t <= 39)

  ft(B,C,D) = (B ANDC) or (B AND D) or (C AND D) (40 <= t <= 59)

  ft(B,C,D) = B XOR CXOR D (60 <= t <= 79).

  (五)计算消息摘要

  必须使用进行了补位和补长度后的消息来计算消息摘要。计算需要两个缓冲区,每个都由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第二个5个字的缓冲区被标识为H0,H1, H2, H3, H4。80个字的缓冲区被标识为W0,W1,..., W79

  另外还需要一个一个字的TEMP缓冲区。

  为了产生消息摘要,在第4部分中定义的16个字的数据块M1,M2,..., Mn

  会依次进行处理,处理每个数据块Mi 包含80个步骤。

  在处理每个数据块之前,缓冲区{Hi} 被初始化为下面的值(16进制)

  H0 = 0x67452301

  H1 = 0xEFCDAB89

  H2 = 0x98BADCFE

  H3 = 0x10325476

  H4 = 0xC3D2E1F0.

  现在开始处理M1, M2,... , Mn。为了处理 Mi,需要进行下面的步骤

  (1). 将Mi 分成 16 个字 W0, W1, ... , W15,W0 是最左边的字

  (2). 对于t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8XOR Wt- 14 XOR Wt-16).

  (3). 令A = H0, B = H1, C = H2, D = H3, E = H4.

  (4) 对于t = 0 到 79,执行下面的循环

  TEMP = S5(A) +ft(B,C,D) + E + Wt + Kt;

  E = D; D = C; C =S30(B); B = A; A = TEMP;

  (5). 令H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.

  在处理完所有的 Mn, 后,消息摘要是一个160位的字符串,以下面的顺序标识

  H0 H1 H2 H3 H4.

  对于SHA256、SHA384、SHA512。你也可以用相似的办法来计算消息摘要。对消息进行补位的算法完全是一样的。

   三、SHA算法被破解了吗?

2013年9月10日美国约翰霍普金斯大学的计算机科学教授,知名的加密算法专家,Matthew Green被NSA要求删除他的一份关于破解加密算法的与NSA有关的博客。 同时约翰霍普金斯大学服务器上的该博客镜像也被要求删除。

加密算法专家,美国约翰霍普金斯大学教授Matthew Green

但当记者向该大学求证时,该校称从未收到来自NSA的要求要删除博客或镜像的资料,但记者却无法在原网址再找到该博客。幸运的是,从谷歌的缓存可以找到该博客。该博客提到NSA每年花费2.5亿美元来为自己在解密信息方面获取优势,并列举了NSA的一系列见不得人的做法。

在BitcoinTalk上,已经掀起了一轮争论:到底SHA-2是否安全?

部分认为不安全的观点包括:

  1. NSA制造了sha-2, 我们不相信NSA,他们不可能不留后门。
  2. 棱镜事件已经明白的告诉我们,政府会用一切可能的手段来监视与解密。
  3. 虽然有很多人会研究SHA-2,且目前没有公开的证据表明有漏洞。但没有公开这并不能代表就没有,因为发现漏洞的人一定更倾向于保留这个秘密来自己利用,而不是公布。

部分认为安全的观点包括:

  1. SHA-2是应用广泛的算法,应该已经经历了实践的检验。
  2. 美国的对头中国和俄国都有很多杰出的数学家,如果有问题的话,他们肯定已经发现了。
  3. 如果真的不安全,世界上安全的东西就太少了,我不能生活在提心吊胆里,所以我选择相信安全。

[转帖]什么是安全散列算法SHA256?的更多相关文章

  1. 什么是安全散列算法SHA256?

    安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1.SHA-224.S ...

  2. 区块链中的密码学(-)区块链中运用最广的散列算法-SHA256算法分析与实现

    在很多技术人员的眼中,区块链并不是一种新的技术,而是过去很多年计算机技术的组合运用.而在这个方方面面技术的运用上,基于密码学的加密算法可以说是区块链各种特点得以表现的根本,一旦目前使用的加密算法被证实 ...

  3. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

  4. 个人理解c#对称加密 非对称加密 散列算法的应用场景

    c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 ...

  5. C# SHA1散列算法

    C# SHA1散列算法 /// <summary> /// C# SHA1散列算法 /// </summary> /// <param name="str&qu ...

  6. SHA安全散列算法简析

    1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...

  7. shiro进行散列算法操作

    shiro最闪亮的四大特征:认证,权限,加密,会话管理 为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块: 1.加密工具类的熟悉 首先来个结构图,看看shiro提供了哪些加密工具类: ...

  8. shiro中自定义realm实现md5散列算法加密的模拟

    shiro中自定义realm实现md5散列算法加密的模拟.首先:我这里是做了一下shiro 自定义realm散列模拟,并没有真正链接数据库,因为那样东西就更多了,相信学到shiro的人对连接数据库的一 ...

  9. java学习-sha1散列算法

    直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40, 也就是用md.digest()方法解析出来的字节数是160字节长度. 而MD5散列算法生成 ...

随机推荐

  1. clearRect清除html5画布

    html5 canvas 清除可以使用clearRect() 方法 clearRect() 方法的作用是清空给定矩形内的指定像素.JavaScript 语法:context.clearRect(x,y ...

  2. day22 Pythonpython 本文json模块

    json模块 •应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转化为json ...

  3. 【总文档】rac增加新节点的方法步骤 How to Add Node/Instance or Remove Node/Instance in 10gR2, 11gR1, 11gR2 and 12c Oracle Clusterware and RAC

    [总文档]How to Add Node/Instance or Remove Node/Instance in 10gR2, 11gR1, 11gR2 and 12c Oracle Clusterw ...

  4. 2018-2019-2 20165302程上杰 Exp6 信息搜集与漏洞扫描

    1,实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.,实验内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测. ...

  5. AI 随机梯度下降(SGD)

    随机梯度下降(stochastic gradient descent) 梯度是期望 计算梯度耗时太长

  6. Photoshop 基础一 安装

     安装 版本介绍 学习教程  一.安装 1)注册Adobe账号,注册地址:Adobe注册 2)下载地址:Adobe下载 下载地址2:百度经验 3)安装:试用期7天的版本 二.版本介绍 1)最新版本:A ...

  7. Mysql windows版本的安装

    一.mysql官网下载 下载安装包 MySQL Community Server (GPL)--> 选用zip版本的 二.安装 解压mysql的安装包. 将bin目录配置到环境变量中.(即环境变 ...

  8. 初识Identity(二)

    本文参考了[ASP.NET Identity系列教程(一)]ASP.NET Identity入门 一.Identity使用前准备项目 本文创建了一个名称为Users的项目.在创建过程中选择了“Empt ...

  9. LOJ2542 PKUWC2018 随机游走 min-max容斥、树上高斯消元、高维前缀和、期望

    传送门 那么除了D1T3,PKUWC2018就更完了(斗地主这种全场0分的题怎么会做啊) 发现我们要求的是所有点中到达时间的最大值的期望,\(n\)又很小,考虑min-max容斥 那么我们要求从\(x ...

  10. LINQ 如何动态创建 Where 子查询

    还是那句话,十年河东,十年河西,莫欺少年穷! 学无止境,精益求精... 今天探讨下如何构造动态的LINQ子查询 LINQ,相信大家都写过,很简单,下面以一个基本的范例说明下: namespace Co ...