HMAC-SHA256 算法作用
时间: 2023-11-10 09:26:34 浏览: 117
HMAC-SHA256是一种消息认证码算法,它可以用于数据完整性验证和身份验证。
具体来说,HMAC-SHA256可以用来计算一个密钥相关的哈希值,该哈希值可以用于验证来自某个特定发送者的消息的完整性和真实性。这个过程涉及将要发送的消息与一个密钥进行结合,然后使用SHA-256哈希函数计算出一个摘要(即哈希值),再将这个摘要与发送者的密钥进行结合,生成最终的哈希值。接收者可以使用同样的密钥和哈希函数对接收到的消息进行哈希运算,然后将计算出的哈希值与发送者发送的哈希值进行比较,从而确定消息是否被篡改或伪造。
因此,HMAC-SHA256算法可以用于保护Web应用程序、API和其他网络服务中的数据传输,以确保数据在传输过程中不被篡改或伪造。
相关问题
汇编代码实现HMAC-SHA256算法
根据提供的引用内容,HMAC-SHA256算法需要使用密钥生成函数HKDF_SHA256和SHA256哈希函数。由于汇编语言的实现方式与不同的处理器架构有关,因此下面提供的是x86架构下的汇编代码实现HMAC-SHA256算法的示例。
section .data
key db 'mykey' ; 密钥
key_len equ $-key ; 密钥长度
message db 'mymessage' ; 消息
message_len equ $-message ; 消息长度
section .text
global _start
; 定义SHA256哈希函数
sha256:
; 参数:eax - 指向消息的指针,ebx - 消息长度,ecx - 指向哈希值的指针
; 返回值:无
push ebx ; 保存消息长度
push ecx ; 保存哈希值指针
push eax ; 保存消息指针
mov eax, 0x67452301
mov ebx, 0xEFCDAB89
mov ecx, 0x98BADCFE
mov edx, 0x10325476
; 填充消息
mov esi, eax
mov edi, [esp+8] ; 消息指针
mov ecx, ebx
mov edx, ecx
add edx, eax
mov ebx, edx
mov edx, 0xC3D2E1F0
mov ebp, 0x80
mov [edi+ebx], byte 0x80
mov ebx, 0
mov ecx, ebp
sub ecx, ebx
cmp ecx, 0x40
jbe .Lpad
mov ecx, 0x40
.Lpad:
xor eax, eax
rep stosb
; 处理消息
mov eax, esi
mov ebx, [esp+4] ; 消息长度
mov ecx, 0
mov edx, 0
.Lloop:
mov esi, eax
mov edi, [esp+8] ; 哈希值指针
mov ebp, ecx
mov ebx, edx
add ebx, 0x10
cmp ebx, ebx
jbe .Lend
mov ebx, ebx
sub ebx, edx
cmp ebx, 0x40
jbe .Lend
mov ebx, 0x40
.Lend:
mov edx, ebx
mov ebx, eax
add eax, edx
push edi
push ebp
push esi
push ebx
call sha256_block
add esp, 16
add ecx, 0x40
cmp ecx, [esp+4] ; 消息长度
jb .Lloop
; 输出哈希值
pop eax ; 恢复消息指针
pop ecx ; 恢复哈希值指针
pop ebx ; 恢复消息长度
ret
; 定义SHA256哈希函数的内部块处理函数
sha256_block:
; 参数:eax - 指向消息块的指针,ebx - 指向哈希值的指针,ecx - 消息长度,edx - 哈希值长度
; 返回值:无
push ebp ; 保存ebp
mov ebp, esp ; 设置ebp
sub esp, 0x20 ; 分配栈空间
push ebx ; 保存哈希值指针
push esi ; 保存消息块指针
push edi ; 保存消息长度
push ebp ; 保存ebp
mov ebp, esp ; 设置ebp
; 初始化变量
mov esi, [ebp+0x10] ; 消息块指针
mov edi, [ebp+0x8] ; 哈希值指针
mov ebx, [edi]
mov ecx, [edi+4]
mov edx, [edi+8]
mov eax, [edi+12]
mov ebp, [edi+16]
mov esi, [edi+20]
mov edi, [edi+24]
; 处理消息块
mov ebp, 0x428A2F98
mov edx, [esi]
mov eax, [esi+4]
mov ebx, [esi+8]
mov ecx, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ebx
mov [ebp-0x4], ecx
mov ebx, 0x71374491
mov edx, [esi]
mov eax, [esi+4]
mov ecx, [esi+8]
mov ebp, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ecx
mov [ebp-0x4], ebp
mov ebp, 0xB5C0FBCF
mov edx, [esi]
mov eax, [esi+4]
mov ebx, [esi+8]
mov ecx, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ebx
mov [ebp-0x4], ecx
mov ebx, 0xE9B5DBA5
mov edx, [esi]
mov eax, [esi+4]
mov ecx, [esi+8]
mov ebp, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ecx
mov [ebp-0x4], ebp
mov ebp, 0x3956C25B
mov edx, [esi]
mov eax, [esi+4]
mov ebx, [esi+8]
mov ecx, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ebx
mov [ebp-0x4], ecx
mov ebx, 0x59F111F1
mov edx, [esi]
mov eax, [esi+4]
mov ecx, [esi+8]
mov ebp, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ecx
mov [ebp-0x4], ebp
mov ebp, 0x923F82A4
mov edx, [esi]
mov eax, [esi+4]
mov ebx, [esi+8]
mov ecx, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ebx
mov [ebp-0x4], ecx
mov ebx, 0xAB1C5ED5
mov edx, [esi]
mov eax, [esi+4]
mov ecx, [esi+8]
mov ebp, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ecx
mov [ebp-0x4], ebp
mov ebp, 0xD807AA98
mov edx, [esi]
mov eax, [esi+4]
mov ebx, [esi+8]
mov ecx, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ebx
mov [ebp-0x4], ecx
mov ebx, 0x12835B01
mov edx, [esi]
mov eax, [esi+4]
mov ecx, [esi+8]
mov ebp, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ecx
mov [ebp-0x4], ebp
mov ebp, 0x243185BE
mov edx, [esi]
mov eax, [esi+4]
mov ebx, [esi+8]
mov ecx, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ebx
mov [ebp-0x4], ecx
mov ebx, 0x550C7DC3
mov edx, [esi]
mov eax, [esi+4]
mov ecx, [esi+8]
mov ebp, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ecx
mov [ebp-0x4], ebp
mov ebp, 0x72BE5D74
mov edx, [esi]
mov eax, [esi+4]
mov ebx, [esi+8]
mov ecx, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ebx
mov [ebp-0x4], ecx
mov ebx, 0x80DEB1FE
mov edx, [esi]
mov eax, [esi+4]
mov ecx, [esi+8]
mov ebp, [esi+12]
add esi, 0x10
mov [ebp-0x10], edx
mov [ebp-0xC], eax
mov [ebp-0x8], ecx
mov [ebp-0x4], ebp
; 更新哈希值
mov edx, [edi]
add [ebp-0x10], edx
mov eax, [edi+4]
adc [ebp-0xC], eax
mov ebx, [edi+8]
adc [ebp-0x8], ebx
mov ecx, [edi+12]
adc [ebp-0x4], ecx
mov edx, [edi+16]
adc [ebp+0], edx
mov eax, [edi+20]
adc [ebp+4], eax
mov ebx, [edi+24]
adc [ebp+8], ebx
mov ecx, [edi+28]
adc [ebp+0xC], ecx
; 输出哈希值
pop ebp ; 恢复ebp
pop edi ; 恢复消息长度
pop esi ; 恢复消息块指针
pop ebx ; 恢复哈希值指针
add esp, 0x20 ; 释放栈空间
ret
; 定义HMAC-SHA256算法
hmac_sha256:
; 参数:eax - 指向密钥的指针,ebx - 密钥长度,ecx - 指向消息的指针,edx - 消息长度,esi - 指向哈希值的指针
; 返回值:无
push ebp ; 保存ebp
mov ebp, esp ; 设置ebp
sub esp, 0x20 ; 分配栈空间
push esi ; 保存哈希值指针
push edi ; 保存密钥指针
push ebp ; 保存ebp
mov ebp, esp ; 设置ebp
; 计算内部密钥
mov esi, [ebp+0x10] ; 消息指针
mov edi, [ebp+0x8] ; 密钥指针
mov ebx, [ebp+0x14] ; 密钥长度
cmp ebx, 0x40
jbe .Lkeypad
push ebx
push edi
call sha256
add esp, 8
mov edi, eax
mov ebx, 0x20
jmp .Lkeydone
.Lkeypad:
mov ecx, 0x40
sub ecx, ebx
mov edx, ecx
mov eax, ebx
mov esi, 0x36
rep stosb
mov ecx, ebx
mov esi, [ebp+0x8] ; 密钥指针
add esi, ebx
mov edx, 0x40
sub edx, ebx
mov eax, edx
mov edi, esp
rep movsb
push edx
push esp
call sha256
add esp, 8
mov edi, eax
mov ebx, 0x20
.Lkeydone:
; 计算外部密钥
mov esi, [ebp+0x10] ; 消息指针
mov ebx, [ebp+0x14] ; 消息长度
mov edx, 0x40
sub edx, ebx
mov eax, edx
mov edi, esp
rep movsb
Unable to negotiate with 20.205.243.166 port 22: no matching MAC found. Their offer: hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256
这个错误通常是由于 SSH 客户端和服务器之间协商加密算法时没有找到匹配的算法导致的。可能的原因包括:
- 服务器禁用了您的 SSH 客户端提供的加密算法或 MAC 算法。
- 您的 SSH 客户端不支持服务器所提供的加密算法或 MAC 算法。
您可以尝试在 SSH 客户端中指定所需的加密算法或 MAC 算法。例如,您可以在 ~/.ssh/config
文件中添加以下行:
Host your_host
MACs hmac-sha2-256
这将指定仅使用 hmac-sha2-256
MAC 算法连接到 your_host
主机。您可以使用 ssh -vvv
命令调试 SSH 连接,并查看哪些算法被接受或被拒绝。
相关推荐














