Openssl学习笔记

Posted by wsxq2 on 2019-12-02
TAGS:  OpenSSL密码学网络安全TODO

本文最后一次编辑时间:2019-12-02 11:47:56 +0800

本文讲述笔者学习 OpenSSL 的笔记

简介

OpenSSL 支持巨多的加密算法,包括密码学中必学的 DES、AES、RSA、MD5、SHA-1、SHA256 等等。通过它可以加深对密码学的理解,尤其是在看其源码后

在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份。这个包广泛被应用在互联网的网页服务器上。

其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL可以运行在OpenVMS、 Microsoft Windows以及绝大多数类Unix操作系统上(包括Solaris,Linux,Mac OS X与各种版本的开放源代码BSD操作系统)。它也提供了一个移植版本,可以在IBM i(OS/400)上运作。

虽然此软件是开放源代码的,但其许可书条款与GPL有冲突之处,故GPL软件使用OpenSSL时(如Wget)必须对OpenSSL给予例外。

——引用自OpenSSL - 维基百科,自由的百科全书

OpenSSL 出现得早,故而应用广泛,与之类似的还有 OpenPGP。OpenPGP 的接口更友好,更安全,但是支持的加密算法数量不如 OpenSSL

原理

TODO

用法

对称加密

获取帮助

官方文档:Enc - OpenSSLWiki

1
openssl enc -h

AES

1
2
3
4
5
6
7
8
# 不加盐、不对结果 BASE64 编码
openssl enc -aes-256-cfb -e -nosalt -in plain.txt -out cipher.txt
openssl enc -aes-256-cfb -d -nosalt -in cipher.txt -out plain.txt

# 加盐、对结果 BASE64 编码
openssl aes-256-cbc -a -salt -in secrets.txt -out secrets.txt.enc
openssl aes-256-cbc -d -a -in secrets.txt.enc -out secrets.txt.new

然而当我使用如下命令试图解密 SS 传输的数据时(使用的加密方式为aes-128-gcm):

1
2
root@master:_posts# openssl enc -aes-128-gcm -d -nosalt -in b
AEAD ciphers not supported by the enc utility

才发现 OpenSSL 不支持支持 AEAD 的加密算法 1

OpenSSL vs GPG

OpenSSL vs GPG for encrypting off-site backups?

参见ruby - OpenSSL vs GPG for encrypting off-site backups? - Stack Overflow

链接

下面总结了本文中使用的所有链接:

引用

  1. https://github.com/openssl/openssl/issues/471