【发布时间】:2021-08-26 11:51:50
【问题描述】:
我在使用 USB Armory Mk-II 的 Linux Crypto API(用户空间接口)时遇到了一些问题。我成功进行了哈希计算但没有进行aes加密或解密操作。
我正在编写一个使用 API 进行 AES 加密/解密的 go 代码。我以以下代码为例来帮助我:https://github.com/f-secure-foundry/mxs-dcp/blob/master/dcp_tool.go。一切都已安装,这是我的加密功能的一部分:
fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0)
addr := &unix.SockaddrALG{Type: "skcipher", Name: "ecb-aes-dcp"}
unix.Bind(fd, addr)
KEY := "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"
err = syscall.SetsockoptString(fd, unix.SOL_ALG, unix.ALG_SET_KEY, KEY)
if err != nil {
return
}
//unix.ALG_OP_ENCRYPT = 0x1
// from https://pkg.go.dev/golang.org/x/sys/unix#pkg-constants
//ENCRYPT := "\x00"
err = syscall.SetsockoptInt(fd, unix.SOL_ALG, unix.ALG_SET_OP, unix.ALG_OP_ENCRYPT)
if err != nil {
return
}
代码在syscall.SetsockoptInt停止运行,错误为“协议不可用”。
我不知道这是从哪里来的,Linux 加密 API 文档 (https://www.kernel.org/doc/html/v4.19/crypto/index.html) 并没有真正帮助我。如果我理解它,我必须进行系统调用来告诉我想要加密操作(unix.ALG_SET_OP,unix.ALG_OP_ENCRYPT)。但这不起作用。
有人知道为什么吗?
【问题讨论】:
标签: go encryption linux-kernel