SHA算法基本认证原理

VSole2021-09-22 07:46:12

SHA(Secure Hash Algorithm,安全哈希算法)主要适用于数字签名,也是一种不可逆的MAC算法,但比MD5算法更加安全。目前它有三种主要的版本,即SHA-0、SHA-1、SHA-2和SHA-3。其中SHA-2和SHA-3版本中又有多种不同子分类,如在SHA-2中又根据它们最终所生成的摘要消息长度的不同又包括SHA-224、SHA-256、SHA-384和SHA-512等几种。

1. SHA算法基本认证原理

整个SHA算法的认证原理与MD5算法认证原理极为相似,同样先把原始消息划分成固定长度的块,最后加上用于标识原始消息长度的位(不同SHA版本中用于标识原始消息长度的位数不一样),再结合共享密钥(可以是共同设置的预共享密钥,也可以是对端公钥),利用一系列的逻辑算法生成固定长度的消息摘,用于在接收端进行消息完整性验证和消息源身份认证。

在各种版本SHA算法中(因为SHA-3的算法与其他SHA版本的算法有较大不同,故在此不作介绍),进行散列运算时所涉及的一些参数特性不完全相同,具体如表1所示。从表中可以看出,SHA-0、SHA-1算法与MD5类似,都是把输入原始消息的二进制串划分成512位的块,最后一块的最后64位用于表示原始消息的长度,不足512位时也要进行填充。

表1 主要MAC算法的基本参数特性比较

2. SHA算法消息填充原理

SHA算法中在进行消息分块时也可能要进行填充。其填充的方法与MD5算法一样,也是先加1位“1”,然后填充若干位“0”。如SHA-0和SHA-1最后会把划分和填充后的消息与共享密钥进行80轮的逻辑运算处理,得到一个160位的摘要消息。但SHA-0和SHA-1仍然容易出现碰撞(即有可能多个不同消息运算后得到相同的摘要),所以目前主要是采用SHA-2版本。

下面仅以SHA-512(也有写成SHA2-256的)为例介绍其基本的摘要运算过程。其他SHA版本的基本摘要算法类似。

(1)把包括密钥和初始消息在内的二进制比特串(假设称之为“原始消息”,小于2128),以及在最后新增一个用于记录原始消息二进制长度的128位一起被划分成一个个1024位(32个32位字长)的块;

当采用SHA-512进行运算时,如果原始消息长度大于等于2128时,只取前面2128−1位进行摘要运算。

(2)同样再对以上划分的1024位的块经过系列“与”(And)、“或”(OR)、“非”(NOT)、“异或”(AOR)逻辑算法(具体算法我们可以不做了解)处理后,输出8个64位分组,将这8个64位分组级联后将生成一个512位散列值(消息摘要)。

这里同样涉及“填充”操作,因为大多数原始消息(包括密钥和初始消息),加上128位后可能仍不能恰好被1024整除,也就是原始消息的二进制位数除以1024后的余数不是896(1024-128=896),这时就表明需要对原始信息进行填充处理了。但这里同样有两种情况:一种是余数小于896,另一种就是余数大于896。

如果原始消息二进制位数除以1024后的余数小于896,则先在原始消息的最后一个1024位块的最后填充一个1,然后再填充若干位0,使得该块的原始消息总长度等于896位,然后加上用于标识原始消息长度的128位,正好形成一个1024位的块。

如一个有1500位的消息,则可划分成两个1024位的块:第一个块是1024位全部为原始消息;第二个块中有476位原始消息,然后进行填充:先在最后填充1位“1”,再填充419位“0”,使得476位原始信息+1位,1+419位,0=896位,最后再附上128位用于标识原始信息长度(1500)的值。

如果如果原始消息二进制位数除以1024后的余数大于896,这时要新增一个1024位的块了。首先是在原始消息的最后一个1024位块的最后填充一个1,然后再填充若干位0,使得该块的原始消息总长度等于1024位;接着再新增一个块,前面896位均填充0,再加上用于标识原始消息长度的128位,形成新的一个1024位块。

如有一个1924位的消息,则最终会划分成三个1024位的块:第一个块是1024位全部为原始消息;第二个块中有900位原始消息,然后进行填充:先在最后填充1位“1”,再填充123位“0”,使得900位原始信息+1位,1+123位,0=1024位;最后是一个新增的块,也要进行填充:先在前面填充896位0,最后再附上128位用于标识原始信息长度(1924)的值。

二进制填充
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,“Grandoreiro”银行木马针对墨西哥汽车和机械制造商的工人,以及西班牙一家化学品制造商的员工进行攻击。2022 年 6 月,Zscaler分析师发现Grandoreiro 银行恶意软件的攻击活动。它涉及部署一个 Grandoreiro 恶意软件变种,该变种具有几个新功能以逃避检测和反分析,以及改进的 C2 系统。
依赖于特定硬件环境的固件无法完整模拟,需要hook掉其中依赖于硬件的函数。LD_PRELOAD的劫持对于特定函数的劫持技术分为动态注入劫持和静态注入劫持两种。网上针对LD_PRELOAD的劫持也有大量的描述
本文根据上述模型和算法实现了一个基于word2vec和LSTM的简单模型用于判断两个函数或者两个指令序列是否相似。总体框架函数嵌入LSTM是RNN的一个变体,由于RNN容易梯度消失无法处理长期依赖的问题。
最近,QEMU 的一个bug导致 kexec 之后的内核崩溃,因为 kexec-ed 内核将无法解压缩压缩的 initrd。此错误仅影响在 QEMU 中使用压缩内联的新 Linux 内核。物理机器上的 kexec,以及在 QEMU 中使用压缩的 initrd 引导 Linux 内核的其他方法,均不受影响。当然,在 QEMU 中,使用未压缩的initrd来创建新Linux内核是有效的,因此,如果您想在 QEMU中使用基于kexec的引导加载程序,则可能必须使用未压缩的initrd才能引导目标系统。
Padre是一款功能强大的高级Padding Oracle安全测试工具,在该工具的帮助下,广大研究人员可以轻松针对CBC模式加密执行Padding Oracle攻击测试,以审查和测试目标加密模式的安全性。
据InQuest、Zscaler、Cyfirma等研究组织报告,地下市场最近冒出了一款名为Mystic Stealer的新恶意软件,能够从近40个Web浏览器和70多个浏览器扩展中窃取凭据,主要针对加密货币钱包、Steam和Telegram进行攻击,并且还采用了多种机制来规避分析。试验结果表明,Mystic Stealer采用代码操作技术逃避了大多数防病毒产品的检测。Mystic Stealer的这些能力及其在地下论坛中收获的好评进一步吸引了不法分子的注意,需要警惕其对组织和个人有可能构成的重大威胁。
第1步:检查系统语言 与许多恶意软件类似,BAZARLOADER会手动检查系统的语言以避免在其母国开展恶意攻击。如果语言标识符大于0x43或小于0x18,则将其视为有效,这样BAZARLOADER才会继续执行。如果这个互斥对象已经存在,恶意软件也会自行终止。线程首先尝试获取临界区对象的所有权并检查是否启用了创建标志。
分析Cobalt Strike Payload
2021-12-11 06:49:22
原始Payload Cobalt Strike 的Payload基于 Meterpreter shellcode,例如 API 哈希(x86和x64版本)或http/https Payload中使用的url checksum8 算法等等。 x86 默认的 32 位原始负载的入口点以典型指令开始,CLD (0xFC),然后是CALL指令,并PUSHA (0x60)作为 API 哈希算法的第一条
0X00前言好兄弟一直让我写一篇关于自动化扫描漏洞的文章,由于在公司实习没时间写一些文章,这段时间离职闲下来
VPN:AES加密算法原理
2021-09-26 12:14:34
AES(Advanced Encryption Standard,高级加密标准)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范。它是一种分组加密标准,每个加密数据块大小固定为128位(16个字节),最终生成的加密密钥长度有128位、192位和256位这三种。
VSole
网络安全专家