openSSL
文章平均质量分 60
LostSpeed
c++ coder
展开
-
openssl3.2 - exp - get openssl version info
查资料时,看到用API取旧版openssl取版本信息。去openssl工程中看了一下,有个内部测试程序有如何取openssl版本信息的API调用例子。整理一下。如果程序出了问题, 想确定一下openssl版本时,这个检测代码有用。原创 2024-04-27 12:02:13 · 34 阅读 · 0 评论 -
openssl3.2 - exp - 用base64后的字符串作为配置项的值
今天解析自己封装的内存型的openssl 配置数据,发现openssl并不支持配置项的值为base64之后的直接字符串。原创 2024-04-16 23:37:06 · 1023 阅读 · 0 评论 -
openssl3.2 - exp - class warp for sha3-512
前面实验整了一个对buffer进行sha3-512算hash的函数。实际用的时候,要对几个buffer连续做hash. 前面封装的统一做hash的函数不适用。重新封装了一个类,只要在类的生命周期中,就可以随时对连续的buffer(可能不在一个函数中)做hash的update.原创 2024-04-11 13:07:23 · 311 阅读 · 0 评论 -
openssl3.2 - exp - zlib
客户端和服务端进行数据交换时,如果压缩一下要交互的数据,可以节省带宽。如果数据是文本型, 压缩率特别大。以前用zlib库单独实验过,写起来还挺麻烦的。正好这次已经将zlib特性加入了openssl(openssl3.2 - 编译 - zlib.dll不要使用绝对路径), 试一下用openssl来压缩/解压缩数据方便不?用openssl做zip操作比直接用zlib库操作方便多了。openssl的封装真优秀。原创 2024-04-10 16:07:11 · 431 阅读 · 0 评论 -
openssl3.2 - exp - BIO_push()超过2个节点的应用- 以(aes-128-cbc + base64)为例
BIO_push()形成了一个链.理论上, 多个BIO连在一起, 只需要向BIO链头写数据, 然后BIO_flush(链头), 就可以从BIO链尾读出已经处理过的数据.这样, 就不用逐个处理每个逻辑节点的数据输入输出, 简化了逻辑处理.在openssl源码中找例子, 没找到. openssl中, 能看到的都是BIO_push(bio_head, bio_tail), 然后就向bio_head中写, BIO_flush(bio_head), 从bio_tail中读, 结束.原创 2024-03-21 12:37:40 · 1097 阅读 · 0 评论 -
openssl3.2 - exp - base64 / unbase64
想将2进制内容放到配置文件中, 作为配置项的值.那先base64一下, 变成可见字符串后再写入配置文件.先看了官方的命令行实现.然后从官方命令行实现, 迁移出一个调用openssl API来干活的版本.自己测试迁移后的版本时, 细节还是挺多, 不像记录官方实现那么容易.对BIO_push()的使用有了进一步的认识.原创 2024-03-20 16:46:58 · 560 阅读 · 0 评论 -
openssl3.2 - exp - aes-128-cbc
想将工程中用到的字符串明文用openssl的对称加密算法加密一下, 防止逆向静态分析, 只作为字符串编码/解码的作用.只是为了防止逆向静态分析, 起到一个编码/解码作用, 不介意别人知道密钥是啥.看了一下openssl性能(AES性能大概是2000MB/秒, AES256比AES128稍低)用openssl speed 列出的算法(openssl3.2 - exp - openssl speed test), 想选其他强度更低(速度更快)的其他对称加密算法, 好像没有啊. 非主流的算法, 用opens原创 2024-03-19 19:40:52 · 1219 阅读 · 0 评论 -
openssl3.2 - exp - openssl speed test
想了解一下openssl执行算法时的数据处理速度.查资料, openssl本身有测试功能帮助文件 => D:\3rd_prj\crypt\openssl-3.2.0\doc\html\man1\openssl-speed.html。原创 2024-03-18 14:24:38 · 757 阅读 · 0 评论 -
openssl3.2 - note - Writing OpenSSL Provider Skeleton
到了openssl3.x, engine已经加了弃用的标记.看了官方文档 Writing OpenSSL Provider Skeleton, 做个笔记这个官方文档有用, 看懂后, 可以将自己的算法(或者硬件加密设备)接入openssl.这个官方文档由openssl Provider架构的作者亲自讲解, NB.学到东西了.这个官方demo, 如果用文字将细节描述出来, 挺难的. 毕竟不是一个知识点.主要体会都写在复现工程中了, 这里总结一些零碎.原创 2024-03-16 17:54:54 · 1086 阅读 · 0 评论 -
openssl3.2 - note - Decoders and Encoders with OpenSSL
看了官方文档 Decoders and Encoders with OpenSSL, 做个笔记。原创 2024-03-15 15:00:51 · 653 阅读 · 0 评论 -
openssl3.2 - note - Getting Started with OpenSSL
看到官方文档 Getting Started with OpenSSL, 记录一下笔记。原创 2024-03-15 12:40:26 · 378 阅读 · 0 评论 -
openssl3.2 - exp - get ecc share key from (ecc privkey sender + ecc pubkey receiver)
用命令行从一方ecc私钥 + 另一方ecc公钥中推导出共享密钥的命令行如下单步调试opessl.exe源码, 将这个实现抽出来, 封装了函数.测试后, 程序生成的ecc共享密钥和命令行生成的相同.修正了 load_key(), 载入私钥buffer/公钥buffer都能得到有效的EVP_PKEY*原创 2024-03-13 15:43:07 · 360 阅读 · 0 评论 -
openssl3.2 - exp - export ecc pubkey from ecc priv key
前面实验已经生成了ECC私钥, 现在做从ECC私钥(内容为公私钥对, 里面既有私钥信息, 也有公钥信息)导出ECC公钥.实验对应的命令行为单步调试, 发现命令行实现用的OSSL_STORE_open_ex(), 这个很难受, 没办法移植. 里面没有openssl API可用.还好运气不错, 前面实验有从buffer load key的实现, 改了一下, 可以正常从buffer载入到私钥的EVP_PKEY*然后就可以按照openssl命令行的实验进行移植了, 机智:P。原创 2024-03-13 12:36:33 · 664 阅读 · 0 评论 -
openssl3.2 - exp - generate ecc priv key
前面实验已经将ECC加解密的流程用openssl命令模拟出来了.现在开始将ECC加解密流程中的知识点从openssl.exe源码中迁移到自己工程.先迁移了一个命令如下封装了一个函数, 产生ecc密钥到buffer, 好使.原创 2024-03-12 19:01:41 · 408 阅读 · 0 评论 -
openssl3.2 - exp - 用openssl命令行来模拟ECC加解密的全流程
工程中要用到ECC加解密, 先去查了资料.在网上能查到一些大佬们写的ECC加解密实现(基于openssl API), 不过写的都比较早. 仅仅作为参考.openssl API并不向下兼容, 只要换了openssl版本, 大概率程序得改(改多该少的问题).从网上找到的第三方代码, 大概率不能用(API的名字都不同). 而且网上能查到的实现, 都不说自己用的openssl具体版本.原创 2024-03-12 15:48:45 · 670 阅读 · 0 评论 -
openssl3.2 - 官方demo学习 - encode - ec_encode.c
官方demos/encode 目录中给了2个例子工程功能是载入(RSA/ECC)公钥, 然后自己就可以拿内存中的公钥对象干活了.刚开始过官方demo时, 没明白.现在回头看, 挺简单的.昨天已经将rsa_encode.c搞定了.现在准备做ec_encode.c的实验.肉眼分辨这2个.c, 区别很小. 用BC4看了一下区别, 主要是算法不同.openssl的高级接口封装的真好, 类似的算法使用, 唯一的区别是算法名称不同.原创 2024-03-11 12:49:08 · 730 阅读 · 0 评论 -
openssl3.2 - exp - 选择最好的内建椭圆曲线
在openssl中使用椭圆曲线, 只允许选择椭圆曲线的名字, 无法给定椭圆曲线的位数.估计每种椭圆曲线都有固定的位数(bit prime field)openssl.exe有命令可以列出全部的椭圆曲线列表比较每种椭圆曲线的质数域位数, 挑出最大的那个.可知, 质数域位数最大的椭圆曲线有2个 : sect571k1 或者 sect571r1, 位数都是571位.原创 2024-03-10 17:42:15 · 486 阅读 · 0 评论 -
openssl3.2 - exp - export RSA pubKey from RSA privKey on memory
官方给的例子(openssl3.2 - 官方demo学习 - encode - rsa_encode.c)是基于文件操作的.我的工程只需要openssl 操作内存数据, 改了一个操作buffer的版本.从内存中的RSA私钥数据, 导出RSA公钥来用.原创 2024-03-10 14:49:46 · 529 阅读 · 0 评论 -
openssl3.2 - 官方demo学习 - encode - rsa_encode.c
上次学习官方demo - rsa_encode.c 时, 程序要在UI上输入东西, 不知道输入啥, 就先放着.现在需要非对称加解密的例子, rsa_encode.c就是相关的demo, 必须搞懂啊.现在回过头来再看, 挺简单的.估计当时几百个demo摆在哪里, 太着急了. 内心必须平静才能将事情做好:P功能 :从RSA私钥数据中导出RSA公钥.如果给出输出的口令, 可以导出公私钥对.不过, 谁也不会直接导出私钥(知道可以从私钥数据中导出私钥, 有这么回事就行).原创 2024-03-10 11:51:08 · 328 阅读 · 0 评论 -
openssl3.2 - exp - 可以在命令行使用的口令算法名称列表
上一个笔记, 还有个疑问.openssl pkey -in app_key3.pem -out app_key5_pwd.pem -outform PEM -passout pass:111111 -算法名称如果PEM/DER互转时, 要想转换后的文件带口令保护 就需要指定用哪种算法来执行口令加密算法.并不是随便哪一种可见的算法名称就能用的.算法有限制算法不能有 EVP_CIPH_FLAG_AEAD_CIPHER 标记模式不能是 EVP_CIPH_XTS_MODE。原创 2024-03-09 21:45:48 · 972 阅读 · 0 评论 -
openssl3.2 - exp - PEM <==> DER
想将客户端私钥 + 服务端公钥 数据转成 C数组, 放到客户端工程中.用openssl默认生成好的证书, 公钥, 私钥等数据, 都是PEM格式的.PEM格式的数据有明显的标记, 可以看到PEM数据的用途.如果有人逆向客户端程序, 很容易看到线索.就想着, 将PEM格式文件转为DER格式文件, 然后将DER格式文件转成数组, 再放入客户端程序来用, 这样好一些.查资料时, 看到大部分例子都是拿证书(x509)做的例子.原创 2024-03-09 16:51:01 · 1070 阅读 · 0 评论 -
openssl3.2 - exp - generate prime
openssl3.2.命令行可以生成质数单步调试openssl.exe工程, 整理了一个函数, 用openssl API来产生质数.openssl命令行是将结果打印到UI上, 我是要将大数结果放到buffer中.查了openssl源码, 可以用BN_bn2binpad()来干这个活.原创 2024-03-09 13:18:07 · 454 阅读 · 0 评论 -
C++ - 多个buffer合并成一个buffer的管理类
客户端要向服务端提交包含在多个buffer中的信息, 如果提交多个buffer(文件), 挺麻烦的.如果将这些buffer(文件), 压缩成一个文件, 处理起来也不是很方便.尝试将多个buffer封装到一个buffer中, 最终将封装好的buffer(写成文件也行)给服务端, 只需要提交一次.封装了一个管理类, 可以向管理类push多个buffer, 最后调用接口, 得到一个完整的大buffer(包含所有压入的小buffer).原创 2024-03-08 15:31:07 · 426 阅读 · 0 评论 -
openssl3.2 - exp - AES-256-GCM
工程中要用到对称加密, 没得选, 要用AES256.在openssl3.2中, AES256加解密的种类有好多种.查了资料, 用AE-S256-GCM不错. 如果密文被修改, 就无法解密成功. 不用再另外传HASH给解密一方(让对方自己算是否密文被修改).原创 2024-03-07 17:30:48 · 524 阅读 · 0 评论 -
openssl3.2 - exp - 产生随机数
要用到openssl产生的随机数, 查了资料.单步跟进去, 看到主要就是调用了一个RAND_bytes(), 没其他了.官方说, 这个函数不一定会成功, 所以一定要判断返回值是否为1.看openssl实现可知, openssl可以产生任意长度的随机数.不用特意初始化随机数, 只要将openssl默认的初始化函数都调用到就行. e.g. 程序入口处调用自己总的openssl初始化函数.// 如果不需要检查openssl的内存泄漏, 就注释掉下面2行的内存分配函数的hook.原创 2024-03-06 18:36:06 · 515 阅读 · 0 评论 -
openssl3.2 - exp - 内存bio操作(建立,写入,读取)配置
我的应用的配置文件是落地加密的, 无法直接用openssl配置接口载入读取.应用先将加密的配置文件解密(openssl官方给的demo工程中有对文件的加解密例子).从明文buffer中载入配置, 然后就可以用openssl的配置接口(BIO为入参)读取配置项的值.做了实验, 用了1天搞定了. 封装了一个配置类. 可以在内存中建立配置, 写入配置, 读取配置.在内存中建立配置,写入配置在服务端用.客户端只用在内存中读取配置的接口.原创 2024-03-04 19:04:27 · 492 阅读 · 0 评论 -
openssl3.2 - exp - calc PE file checksum and SHA3-512
想在程序中, 对自身的PE内容算校验和和HASH, 然后送给服务端判断PE文件是否被修改了.前几天, 看了一个资料, 里面有算PE校验和的实现. 迁移到自己工程.但是没有算HASH, 正好已经将openssl官方demo过了一遍, 有个官方demo正好是对buffer算hash(openssl3.2 - 官方demo学习 - encode - rsa_encode.c), 也迁移到自己工程.导致有内存泄漏.但是我前几天做了openssl3.2检测内存泄漏的实验(原创 2024-02-28 18:28:40 · 769 阅读 · 0 评论 -
openssl3.2 - exp - buf to bio
不想让程序调用openssl API时, 有文件落地的动作.如果程序有配置文件要用, 也是自己读文件到buffer, 然后转成BIO给openssl的相关有BIO入参的API用.如果在程序中用数组定义了一些PEM内容的数组, 也可以将数组转成BIO来用.从openssl测试代码中, 找到了BIO_new_mem_buf(), 可以做这个事情.那么程序需要的文件输入, 都可以读入buffer, 转成BIO, 后续都用BIO来处理.原创 2024-02-26 17:23:44 · 543 阅读 · 0 评论 -
openssl3.2 - crypto-mdebug被弃用后, 内存泄漏检查的替代方法
调用openssl接口后, 如果用到了openssl对象, 需要释放, 否则会发生内存泄漏.即使不是新手, 也不能保证释放函数都调用了. 想想我们自己写程序, new后, 没有delete的情况就知道, 可以理解.谁能保证自己手搓的应用实现100%没内存泄漏呢?看资料时, 发现openssl本身有这个检查库本身发生内存泄漏的特性, 大概就是申请内存时, openssl自己记录了一下, free内存时, 将对应记录删掉.原创 2024-02-25 15:01:18 · 994 阅读 · 0 评论 -
openssl3.2 - 编译 - zlib.dll不要使用绝对路径
前面编译了openssl3.2(openssl3.2 - 编译打开vs2019x64本地命令行, 选择管理员身份运行%path%nmakenmake test如果在本机做实验没问题.前几天, 为了归档方便, 将openssl安装好的路径移动到归档目录中.再运行openssl和zlib相关的功能, 就有报错提示, 说找不到 c:\zlib_1d3\my_zlib_1d3.dll这样就没法在其他计算机上用啊.原创 2024-02-21 16:58:02 · 993 阅读 · 0 评论 -
openssl3.2 - osslsigncode工程的学习
github上有个osslsigncode工程, 可以对PE文件进行code sign签名和验签.想在自己工程中, 对正在运行的的PE本身文件进行完整性校验, 应该能从osslsigncode工程中学到东西.在看资料时, 看到一个逆向工程师, patch掉一个用土法进行EXE本身的完整性校验的案例.这个案例, 程序里面自己算了本身的校验和, 然后和程序中预留的校验和进行比对, 这样很容易被别人搞掉.原创 2024-02-12 13:32:41 · 1099 阅读 · 0 评论 -
vs2019 - signtool签名和验签的手工操作
signtool是进行code sign用的工具. 装了vs2019后自带(SDK中的工具).code sign 是代码签名, 是用证书对PE文件进行签名.前面实验用openssl已经生成了自签名的证书, 现在用vs2019自带的signtool试试code sign的签名和验签.对PE文件进行了代码签名后, 在程序中的逻辑, 就可以判断自己程序的PE有没有被第三方改过.原创 2024-02-11 15:25:12 · 1064 阅读 · 0 评论 -
openssl3.2 - exp - RAND_bytes_ex
生成随机数时, 要检查返回值是否成功, 不能认为一定是成功的(官方文档上有说明).生成随机数的API, 和库上下文有关系, 使用RAND_bytes_ex()比RAND_bytes()好些.原创 2024-02-08 10:11:46 · 689 阅读 · 0 评论 -
openssl3.2 - update debian12‘s default openssl to openssl3.2
在debian12虚拟机中编译了openssl3.2(openssl3.2 - 编译只做openssl3.2的实验没问题, 但是用SSH连接就不行了. 原因在于系统中的openssl还是旧版.Description: 安全套接字层工具箱 - 加密工具本软件包是 OpenSSL 项目对应用于在互联网上进行安全通信的 SSL 和 TLS 加密协议的一个实现。它包含了通用命令行工具 /usr/bin/openssl,主要用于各类加密操作,例如:* 创建 RSA、DH 和 DSA 密钥选项;原创 2024-02-06 15:13:41 · 1183 阅读 · 0 评论 -
openssl3.2 - exp - buffer to BIO
openssl的资料看的差不多了, 准备将工程中用到的知识点整理一下.openssl中很多API是以操作文件作为输入的, 也有很多API是以BIO作为输入的.不管文件是不是受保护的, 如果有可能都在内存操作, 不落地.为了防止要操作的内容落地, 最好是操作BIO.为了操作BIO, 就需要将要操作的数据放到BIO中, 供openssl的API操作.做了一个实验, 将工程中资源中包含的数据, 放到BIO中.原创 2024-02-05 19:11:56 · 603 阅读 · 0 评论 -
openssl3.2 - use openssl cmd create ca and p12
已经用官方perl脚本(CA.pl)做了关于建立CA和封装P12证书的实验(openssl3.2 - helpdoc - P12证书操作).但是将官方perl脚本用的openssl命令行记录下来, 自己用openssl命令行重新做一遍实验时, 发现有些文件, 目录的名称是从配置文件来的(e.g. DemoCA), 显然自己要的CA名字不应该是这么随意的实验名字.还有建立目录时, 目录的名称也是从配置文件来的. 如果此目录不存在, openssl命令行就会失败.原创 2024-02-04 17:38:33 · 1131 阅读 · 0 评论 -
openssl3.2 - 官方demo学习 - pkcs12 - pkread.c
openssl3.2 - 官方demo学习 - 索引贴将官方demos的pkread.c 过了一下.只要有正确的.P12证书和导出口令, 这个实验做起来很快.程序功能, 读.P12文件(需要给出导出口令), 将证书的友好名称, 私钥, 可信任证书都导出到指定的输出文件.原创 2024-02-01 13:25:53 · 342 阅读 · 0 评论 -
openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c
openssl3.2 - 官方demo学习 - 索引贴上次PKCS12的官方实验还没做, 原因是没在官方demo中看到如何生成P12的证书, 因为P12是受密码保护的, 如果不知道密码, 随便拿来一个.P12证书, 用编程也操作不了.整理了官方帮助文件(openssl3.2 - 帮助文档的整理)后, 很容易就找到了官方说明, 如何用openssl命令行去生成P12证书的全流程操作.今天拿官方demo pkwrite.c + 自己做的服务器证书来做实验, 学到东西了.原创 2024-02-01 12:43:44 · 1283 阅读 · 0 评论 -
openssl3.2 - helpdoc - P12证书操作
D:\3rd_prj\crypt\openssl-3.2.0\demos\pkcs12目录下, 有2个实验(pkread.c, pkwrite.c), 需要PKCS12的证书.但是官方给的demos/certs目录的脚本中, 并没有看到如何生成P12证书.现在将openssl帮助文档整理出来后, 找到了如何生成P12证书.做个实验先, 自己将P12证书生成出来, 给\demos\pkcs12目录下的实验用.原创 2024-01-31 21:09:36 · 648 阅读 · 0 评论 -
openssl3.2 - 帮助文档的整理
openssl3.2源码工程编译安装完, 对于库的使用者, 有用的文档, 远不止安装的那些html.用everything查找, 配合手工删除, 将有点用的文档都留下(都将文件打开确认了一下), 整理完后, 用自己做的临时工具(遍历删除空文件夹), 将空文件夹都删掉, 然后归档, 留着自己以后看.有些POD, 是没有被官方转成html来安装给用户看的.可以自己转成html(openssl3.2 - .pod文件的查看方法。原创 2024-01-31 13:30:17 · 611 阅读 · 0 评论