zoukankan      html  css  js  c++  java
  • openssl3.0 加密算法库编程精要 01 简介

     

    1.1 系统环境简介

      操作系统 -- Ubuntu 20.04.3 LTS

      gcc 版本 -- gcc version 9.3.0

      openssl 版本 -- openssl3.0.1

    1.2 简述

      Openssl 是一个免费开源的工具包,实现了 TLS/SSL 协议和绝大多数的主流密码算法和标准,最初的版本由 Eric A. Young 和 Tim J. Hudson 创建,其官方网站为 www.openssl.org

    Openssl 主要包含三个部分:

      (1)libssl  -- TLS 协议的实现(RFC 8446);

      (2)libcrypto -- 加密算法库,支持绝大多数密码算法,是实现 TLS 协议和 PKI 体系的基础;

      (3)openssl -- 命令行工具

      我在这里特别说明一下:

      由于 Openssl 的代码量十分庞大,单一个加密算法库就有数十万行的代码,而且由于密码学博大精深,相关的数学原理更是晦涩难懂,笔者能力

    有限,不可能精通所有相关的知识,所以本系列的文章并不会针对 Openssl 的源码进行深入的讨论,我只会在用户层面对 Openssl 的加密算法库做一些常用的 API 解读,重在应用!

    如果涉及到我相对了解的知识,我会尽量无保留地分享,文章有错误的话在所难免,我也欢迎各位读者对我文中的错误进行批评指正!共同学习,共同进步!

       作者假定各位读者已经熟练掌握 C 语言和有基本的密码学知识。

    1.3 编译和安装

      Openssl 的编译十分简单,步骤如下:

      (1)在官网下载 openssl3.0.1 版本,得到 openssl-3.0.1.tar.gz;

      (2)输入 tar -zxvf openssl-3.0.1.tar.gz 解压 tar 包到当前目录;

      (3)进入解压后的目录执行 ./Configure 生成 Makefile 文件(openssl 默认安装到 /usr/local 下,如需指定安装路径,则执行 ./Configure --prefix=/xxx/xxx);

      (4)执行 make 编译;

      (5)执行 make install 安装;

    1.4 常用的编译选项和配置

      默认编译生成 release 版本的共享库,如果要生成可调式的库,则输入 ./Configure --debug,具体的编译选项请查询 INSTALL.md 文件。

    1.5 openssl3.0 加密算法库目录结构

      虽然我们的目标并不是完全精通 Openssl 的源码,但是了解其源代码目录的含义仍然是有必要的:

      aes -- AES 对称算法实现;

      aria -- ARIA 对称算法实现;

      asn1 -- ASN.1 编解码实现;

      aysnc -- 异步线程池实现;

      bf -- blowfish 对称算法实现;

      bio -- I/O 流的抽象;

      bn -- 大数运算实现;

      buffer -- 内存缓冲区;

      camellia -- Camellia 块密码算法;

      cast -- CAST 对称算法;

      chacha -- ChaCha20 流密码算法;

      cmac -- 基于分组密码的消息认证码;

      cmp -- 证书管理协议;

      cms -- 加密消息语法;

      comp -- 压缩算法;

      conf -- 配置文件管理;

      crmf -- 暂时不确定这个是做什么的;

      ct -- 证书透明化(Certificate Transparency);

      des -- des 对称算法;

      dh -- 密钥交换协议;

      dsa -- DSA签名算法;

      dso -- 动态库管理;

      ec -- 椭圆曲线算法;

      encode_decode -- 编码和解码;

      engine -- 引擎框架;

      err -- 错误处理;

      ess -- 增强安全服务(Enhanced Security Services);

      evp -- 高层算法接口;

      ffc -- 有限域加密;

      hmac -- 基于 hash 的消息鉴别码;

      http -- http 协议实现;

      idea -- 国际数据加密算法;

       kdf -- 密钥派生函数;

      lhash -- 哈希链表实现;

      md2 -- md2 摘要算法;

      md4 -- md4 摘要算法;

      md5 -- md5 摘要算法;

      mdc2 -- mdc2 摘要算法;

      modes -- 对称算法的模式;

      objects -- 对象管理;

      ocsp -- 在线证书状态协议;

      pem -- PEM 编解码实现;

      pkcs7 -- 加密签名消息语法标准 PKCS7 实现;

      pkcs12 -- 个人信息交换语法标准 PKCS12 实现;

      poly1305 -- Poly1305 消息认证码;

      property -- 暂不清楚这个目录下的文件是做什么的;

      providers -- 安全服务提供者,这个是 openssl3.0+ 最具特色的设计;

      rand -- 随机数;

      rc2 -- RC2 对称算法;

      rc4 -- RC4 对称算法;

      rc5 -- RC5 对称算法;

      ripemd -- RACE原始完整性校验消息摘要;

      rsa -- RSA 非对称算法;

      seed -- 基于随机种子的对称加密算法;

      sha -- sha1、sha256、sha512等摘要算法实现;

      siphash -- SipHash 摘要算法;

      sm2 -- 国密 sm2 椭圆曲线算法;

      sm3 -- 国密 sm3 摘要算法;

      sm4 -- 国密 sm4 分组加密算法;

      srp -- 暂时不清楚是做什么的;

      stack -- 栈的实现;

      store -- 临时存储通道;

      ts -- 可信时间?

      txt_db -- 基于文本的数据库;

      ui -- 用户接口;

      whirlpool -- Whirlpool 散列算法;

      x509 -- x509 证书系列标准实现。

       下一章节,我计划用一个简单的加密程序做引,进一步讲解 Openssl API 的使用方式。

      以上是本章节的所有内容。

     

  • 相关阅读:
    基于OEA框架的客户化设计(三) “插件式”DLL
    小技巧、小工具列表
    OEA中的AutoUI重构(3) 评审会议后的设计
    基于OEA框架的客户化设计(一) 总体设计
    数据层扩展包EFCachingProvider 总结
    中国软件工程大会总结
    性能优化总结(二):聚合SQL
    招 .Net 开发人员 (北京) 已招满
    War3Share开源
    正则表达式:匹配字符串中除了"abc"以外的所有其它部分
  • 原文地址:https://www.cnblogs.com/huowenjie/p/15719919.html
Copyright © 2011-2022 走看看