📜  获取公共 ssh 密钥 - 汇编(1)

📅  最后修改于: 2023-12-03 14:57:13.793000             🧑  作者: Mango

获取公共 ssh 密钥 - 汇编

在进行安全通信时,使用 SSH(Secure Shell)协议广泛用于加密与解密通信,其中涉及到公私钥的使用。本文将介绍如何在汇编语言中获取公共 SSH 密钥。

SSH 公私钥

SSH通信中使用的公共密钥加密算法为 RSA。一般情况下,我们在本机上生成一个 SSH 密钥对(公钥和私钥),其公钥和私钥都保存在本地主机 ~/ .ssh 目录下。

生成 SSH 密钥对
  1. 首先,需要安装 OpenSSH,使用命令 apt-get install openssh-server

  2. 在终端中输入以下命令行,依次回答提示的问题:

ssh-keygen -t rsa
  1. 回答问询。默认情况下,文件是用户主目录下的 ~/.ssh 目录中的 id_rsa 文件和 id_rsa.pub 文件。
获取公共 SSH 密钥

在汇编语言中,我们可以通过调用系统级的库函数获取本机上保存的 SSH 公共密钥。常用的系统库函数是 getenv。以下是获取 SSH 公共密钥的示例代码:

section .data
SSH_PUBLIC_KEY   db      'SSH_PUBLIC_KEY', 0
section .bss
buffer   resb    1024
section .text
global _start

_start:
    ; get ssh public key 
    ; using getenv to get ssh public key
    
    ; load system library
    push 0x73642f2f
    push 0x6e69622f
    mov ebx, esp
    push edx
    push 'libc.so.'
    push 'getenv'
    mov esi, esp
    
    ; get SSH_PUBLIC_KEY environment variable
    mov edi, SSH_PUBLIC_KEY
    call [esi]
    mov ebp, eax
    
    ; read public key from file
    push ebp
    call [fopen]
    mov ebx, eax
    
    ; print public key
    mov eax, 4
    mov ebx, 1
    lea ecx, [buffer]
    mov edx, 1024
    int 0x80
    
    ; close file
    push ebx
    call [fclose]
    
    ; exit program
    mov eax, 1
    xor ebx, ebx
    int 0x80
    
section .data
SSH_PUBLIC_KEY   db      'SSH_PUBLIC_KEY', 0
section .bss
buffer   resb    1024
section .text
global _start

_start:
    ; get ssh public key 
    ; using getenv to get ssh public key
    
    ; load system library
    push 0x73642f2f
    push 0x6e69622f
    mov ebx, esp
    push edx
    push 'libc.so.'
    push 'getenv'
    mov esi, esp
    
    ; get SSH_PUBLIC_KEY environment variable
    mov edi, SSH_PUBLIC_KEY
    call [esi]
    mov ebp, eax
    
    ; read public key from file
    push ebp
    call [fopen]
    mov ebx, eax
    
    ; print public key
    mov eax, 4
    mov ebx, 1
    lea ecx, [buffer]
    mov edx, 1024
    int 0x80
    
    ; close file
    push ebx
    call [fclose]
    
    ; exit program
    mov eax, 1
    xor ebx, ebx
    int 0x80

在上面的代码中,我们使用到了一些系统级别的库函数,如 getenvstdio.h 中的 fopenfclose。在程序中我们可以通过它们,在汇编语言中调用这些库函数并从本地主机获取 SSH 公共密钥的信息。

结论

本文中,我们介绍了如何在汇编语言中获取 SSH 公共密钥并完整展示了一份获取 SSH 公共密钥的代码。在实际的软件开发过程中,开发者们可以根据自己的需求调整命令以及库函数的使用,使得程序具备更强的安全性。