DSA算法

2023-11-14

DSA

本文主要叙述在CTF中的DSA,根据我自己的理解重述一遍CTF-wiki对DSA的描述

公私钥的生成

  • 选择一个哈希函数 H ( ) H() H();一般选作SHA1

  • 选择比特数为 64 64 64​的倍数的素数 p p p​​,且位数处于 512 512 512​到 1024 1024 1024​之间

  • 选择 160 b i t s 160bits 160bits​​的素数 q q q​(这里对 q q q的大小限制准确来说是不大于哈希函数H输出的长度),满足 q q q p − 1 p-1 p1​的素因子

总之 ( p , q ) (p,q) (p,q)的大小一般是 ( 1024 , 160 ) , ( 2048 , 224 ) , ( 2048 , 256 ) (1024,160),(2048,224),(2048,256) (1024,160),(2048,224),(2048,256)以及 ( 3072 , 256 ) (3072,256) (3072,256)​,单位比特

  • 选择满足 g ≡ h p − 1 q ( m o d   p ) g\equiv h^{\frac{p-1}{q}}(mod~p) ghqp1(mod p)​;其中 1 < h < p − 1 1<h<p-1 1<h<p1​​

  • 选择私钥 x x x 0 < x < q 0<x<q 0<x<q,计算 y ≡ g x ( m o d   p ) y\equiv g^x(mod~p) ygx(mod p)

公钥为 ( p , q , g , y ) (p,q,g,y) (p,q,g,y)

私钥为 ( x ) (x) (x)

数字签名

选择随机整数 k k k作为临时密钥, 0 < k < q 0<k<q 0<k<q

r ≡ ( g k   m o d   p ) m o d   q r\equiv (g^k~mod~p)mod~q r(gk mod p)mod q

s ≡ ( H ( m ) + x ∗ r ) ∗ k − 1 ( m o d   q ) s\equiv (H(m)+x*r)*k^{-1}(mod~q) s(H(m)+xr)k1(mod q)

签名结果为 ( r , s ) (r,s) (r,s)

验证

w ≡ s − 1 ( m o d   q ) w\equiv s^{-1}(mod~q) ws1(mod q)

u 1 ≡ H ( m ) ∗ w ( m o d   q ) u_1\equiv H(m)*w(mod~q) u1H(m)w(mod q)

u 2 ≡ r ∗ w ( m o d   q ) u_2\equiv r*w(mod~q) u2rw(mod q)

v ≡ ( g u 1 ∗ y u 2 m o d   p ) m o d   q v\equiv (g^{u_1}*y^{u_2}mod~p)mod~q v(gu1yu2mod p)mod q

v = = r v==r v==r时,校验成功

CTF应用

一般的CTF题考察DSA算法,是求私钥 x x x

下面的例题来自CTF-wiki

  • 已知随机密钥 k k k

根据 s ≡ ( H ( m ) + x ∗ r ) ∗ k − 1 ( m o d   q ) s\equiv (H(m)+x*r)*k^{-1}(mod~q) s(H(m)+xr)k1(mod q)

解得 x ≡ r − 1 ∗ ( k ∗ s − H ( m ) ) ( m o d   q ) x\equiv r^{-1}*(k*s-H(m))(mod~q) xr1(ksH(m))(mod q)

  • k k k共享

在两次签名中共享 k k k

签名消息为 m 1 , m 2 m_1,m_2 m1,m2

s 1 ≡ ( H ( m 1 ) + x ∗ r ) ∗ k − 1 ( m o d   q ) s_1\equiv(H(m_1)+x*r)*k^{-1}(mod~q) s1(H(m1)+xr)k1(mod q)

s 2 ≡ ( H ( m 2 ) + x ∗ r ) ∗ k − 1 ( m o d   q ) s_2\equiv(H(m_2)+x*r)*k^{-1}(mod~q) s2(H(m2)+xr)k1(mod q)

推导

s 1 ∗ k ≡ H ( m 1 ) + x ∗ r ( m o d   q ) s_1*k\equiv H(m_1)+x*r(mod~q) s1kH(m1)+xr(mod q)

s 2 ∗ k ≡ H ( m 2 ) + x ∗ r ( m o d   q ) s_2*k\equiv H(m_2)+x*r(mod~q) s2kH(m2)+xr(mod q)

相减得到

k ∗ ( s 1 − s 2 ) ≡ H ( m 1 ) − H ( m 2 ) ( m o d   q ) k*(s_1-s_2)\equiv H(m_1)-H(m_2)(mod~q) k(s1s2)H(m1)H(m2)(mod q)

求逆元

k ≡ ( H ( m 1 ) − H ( m 2 ) ) ∗ ( s 1 − s 2 ) − 1 ( m o d   q ) k\equiv (H(m_1)-H(m_2))*(s_1-s_2)^{-1}(mod~q) k(H(m1)H(m2))(s1s2)1(mod q)

已知 k k k之后重复已知密钥 k k k的解密过程即可

参考文章

DSA - CTF Wiki (ctf-wiki.org)

(11条消息) DSA加密算法以及破解_happend的博客-CSDN博客_dsa加密算法

(11条消息) DSA-数据签名算法(理论)_aaqian1的博客-CSDN博客_dsa算法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DSA算法 的相关文章

  • 格密码学习,抽代基础学习(二)

    今天找到了一个比较新手友好的slides 结合lec1和学姐的笔记一起看 full rank lattice 满格 R n mathbb R n Rn的概念 n维度实数集 每个元素是n维向量 向量中的每个分量是实数 Z
  • CTF入门学习笔记——Crypto密码(编码)

    文章目录 CTF入门学习笔记 Crypto密码 编码 BASE编码 BASE16 BASE32 BASE64 BASE85 AFCTF 2018 BASE Uuencode编码 SWPUCTF 2021 新生赛 crypto8 Rabbit
  • RSA加密算法Python实现

    RSA加密算法Python实现 1 RSA算法简介 2 RSA算法涉及的数学知识 2 1互素 2 2 欧拉定理 2 3求模逆元 2 4 取模运算 2 5 最大公因数 2 6 最小公倍数 2 7 欧几里得算法 2 8 扩展欧几里得算法 3 R
  • XCTF密码学(入门一)

    XCTF密码学 入门一 1 1题目 base64 1 2描述 元宵节灯谜是一种古老的传统民间观灯猜谜的习俗 因为谜语能启迪智慧又饶有兴趣 灯谜增添节日气氛 是一项很有趣的活动 你也很喜欢这个游戏 这不 今年元宵节 心里有个黑客梦的你 约上你
  • DES 数据加密标准 结构详解

    DES Data Encryption Standard 又称数据加密标准 是一种对称加密算法 也是密码学摆脱古典流加密后最简单的一种块加密算法 由于香农与1949年提出 完善保密性 该标准要求密钥长度不短于明文长度 实际操作难以达到 因此
  • RSA简介

    什么是RSA RSA算法是应用最广泛的公钥密码算法 1977年 RSA算法由MIT的罗纳德 李维斯特 Ron Rivest 阿迪 萨莫尔 Adi Shamir 和伦纳德 阿德曼 Leonard Adleman 共同设计 于1978年正式发布
  • 【区块链与密码学】第6-9讲:数字签名算法的可证明安全性

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 6 9数字签名算法的可证明安全性 可
  • 北大肖臻老师<<区块链技术>>笔记1

    课程的大纲 密码学基础 比特币的数据结构 共识协议和系统实现 挖矿算法和难度调整 比特币的脚本 软分叉和硬分叉 匿名和隐私保护 以太坊是后面的 首先是密码学基础的学习 crypto currency 虚拟货币 是不加密的 区块链上所有的教以
  • 11 种加密 & 哈希算法的原理及其 Java 实现

    11 种加密 哈希算法的原理及其 Java 实现 一 目的 二 运行环境 三 基本原理及步骤 I 各种加密算法的原理 DES 数据加密标准 Data Encryption Standard 算法介绍 算法流程 优点 缺点 破解方式 适用场景
  • 现代密码学第三次实验:不对称加密算法RSA

    现代密码学第三次实验 不对称加密算法RSA 前言 一 实验目的 二 实验环境 三 实验步骤 四 实验基本方法 五 实验程序清单 七 实验结果 八 实验总结 前言 为了帮助同学们完成痛苦的实验课程设计 本作者将其作出的实验结果及代码贴至CSD
  • 【0325】分组密码

    分组密码 体制概述 分组密码体制 Block cipher 是在密钥k控制下一次变换一个明文数据块 又称分组 的密码体制 特点 速度快 易于标准化和便于软硬件实现等特点 设计原则和评估 针对安全性的两个基本原则 扩散和混淆 对抗统计分析 扩
  • 【总结一】现代密码学

    目录 1 密码学概述 1 1 密码学的基本概念 1 1 1 为什么要学密码学 1 1 2 什么是密码学 1 1 2 密码算法的基本模型 1 1 3 密码算法的分类 1 2 密码分析学 1 3 古典密码算法 1 3 1 置换密码 1 3 2
  • 群G及群运算

    定义 一个 非空集合G中 如果定义了 一个 乘法 运算 元素的二元运算 满足以下四个性质 那么该非空集合G称为群 封闭性 a b G a b c G 结合律 a b c G a b c a b c 单位元 e G a G e a a e a
  • 密码学研究重点

    密码学涵盖了认证 数字签名以及更多基本的安全功能 密码学涉及领域及其宽广 包括计算机安全 高等数学 经济学 量子物理学 民法和刑法 统计学 芯片设计 软件优化 政治 用户界面设计等 0x01 密码学重要性 密码学本身没有价值 必须作为一个系
  • SM2公钥加密

    文章目录 简介 推荐参数 1 前置条件 1 1 点到字符串的转换 压缩 未压缩 混合形式 1 2 密钥派生函数 6 加解密 加密流程 解密流程 实现 参考资料 简介 国密SM2算法并不仅仅是提供了新的曲线参数 而是在算法上对ECC进行了修改
  • 现代密码学案例研究之索尼PS3破解

    ECDSA案例研究之索尼PS3被破解 背景介绍 ECDSA算法介绍 破解算法介绍 Reference 索尼因为PlayStation 3糟糕的加密实现而受到了黑客的破解 那么事情是怎么样的呢 设计了哪些密码学的算法呢 背景介绍 在2010年
  • C# System.UnauthorizedAccessException:“对路径“C:\xxx”的访问被拒绝。

    C 程序运行时提示 对路径 C xxx 的访问被拒绝 System UnauthorizedAccessException 对路径 C Excel2007 xlsx 的访问被拒绝 解决办法是 启动visual studio时选择右键 gt
  • 合肥工业大学密码学课设-RSA

    作者简介 CSDN内容合伙人 信息安全专业在校大学生 系列专栏 课设 密码学课设 RSA 新人博主 欢迎点赞收藏关注 会回访 舞台再大 你不上台 永远是个观众 平台再好 你不参与 永远是局外人 能力再大 你不行动 只能看别人成功 没有人会关
  • 【区块链与密码学】第6-7讲:SM9数字签名算法

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 6 7 SM9数字签名算法 为了降低
  • CTF BugKu平台——Crypto篇刷题记录(后续更新)

    CTF BugKu平台 Crypto篇 前言 抄错的字符 聪明的小羊 ok lt gt 把猪困在猪圈里 你喜欢下棋吗 小山丘的秘密 EN 气泡 你以为是md5吗 Math English easy crypto 黄道十二官 一段新闻 7 1

随机推荐

  • C语言eigen存为txt文件,如何使用线性代数的C模板库Eigen?

    我有一个矩阵的图像处理算法 我有自己的矩阵运算代码 乘法 逆 但我使用的处理器是ARM Cortex A8处理器 它有NEON协处理器进行矢量化 因为矩阵运算是SIMD操作的理想情况 我要求编译器 mfpu neon mfloat abi
  • webrtc音频引擎之audio_processing介绍

    audio processing模块为语音处理的精华 包含音频的回音处理 降噪处理 自动增益处理等音频的核心处理业务算法 静音检测在另外一个模块 不知道新版与这基本算法放到了同一个模块木有 模块结构为 1 aec和aecm 也就是回音消除
  • 【Kubernetes 008】多种类型控制器区别及实际操作详解(RS,Deployment,DaemonSet,Job,ConJob)

    Pod是k8s中的基本结构 前面我们已经创建过一个 但是生产环境中往往不需要我们自己去创建pod 而是通过创建管理pod的控制器而达到自动批量管理pod的目的 这一节我们就一起来看看k8s中有哪些控制器 以及这些控制器的一些基本操作 我是T
  • Spring配置DataSource数据源

    在Spring框架中有如下3种获得DataSource对象的方法 1 从JNDI获得DataSource 2 从第三方的连接池获得DataSource 3 使用DriverManagerDataSource获得DataSource 一 从J
  • flask笔记

    python中的web框架 a socket服务端 b 路由转发 c 模板渲染 Django 同步框架 a 用的别人的 bc自己写的 Flask 同步框架 a 用的别人的 b自己写的 c用的别人的 jinja2 Tornado 异步框架 a
  • 毕业设计 单片机LSRB算法的走迷宫小车 - 嵌入式 stm32

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 硬件设计 马达驱动器 L298N Mpu 6050 60 RPM 直流电机 红外传感器 Arduino Pro mini 5 软件说明 LSRB 算法 6 最后 0 前言 这两年
  • JavaSE进阶

    1 使用集成开发工具eclipse 1 1 java的集成开发工具很多 包括 eclipse Intellij IDEA netbeans eclipse IBM开发的 eclipse翻译为 日食 寓意吞并SUN公司 SUN是太阳 最终没有
  • 坐标转换、地球转火星、百度转火星(python版)

    一 坐标介绍 1 地球坐标 GPS WGS84 地理坐标系统 2 火星坐标 GCJ 02 投影坐标系统 中国自己在WGS84基础上加密而成 3 地球坐标 BD 09 投影坐标系统 百度地图使用 二 坐标转换 import math pi 3
  • 掌握MySQL分库分表(二)Mysql数据库垂直分库分表、水平分库分表

    文章目录 垂直分表 拆分方法 举例 垂直分库 水平分表 水平分库 小结 垂直角度 表结构不一样 水平角度 表结构一样 垂直分表 需求 商品表字段太多 每个字段访问频次不 样 浪费了IO资源 需要进行优化 也就是 大表拆小表 基于列字段进行的
  • Mongodb创建用户角色

    文章目录 一 Mongodb数据库用户角色 二 创建用户 其权限有哪些 1 创建用户语法格式 2 字段解析 三 创建用户实列 总结 一 Mongodb数据库用户角色 MongoDB采用基于角色的访问控制 RBAC 来确定用户的访问 授予用户
  • 博弈论——组合游戏(Bash和nim)

    博弈论1 组合游戏 特征 两个玩家 一个状态集合 游戏规则是指明玩家从一个状态可以移动到哪些状态 玩家轮流进行移动 如果当前处于的状态无法移动 则说明游戏结束 大部分时候 无论玩家如何选择 游戏会在有限步操作内结束 通常的解题步骤 首先设置
  • easyx图形库制作新年烟花(附图片资源)

    目录 先看效果 代码 先看效果 map 看吧是不是非常好看 哈哈 接下来就直接上代码 这个是图形库的坐标图 代码 include
  • kali linux 压缩文件解压缩命令(包含7z)

    kali linux 压缩文件解压缩命令 包含7z tar 解包 tar xvf FileName tar 打包 tar cvf FileName tar DirName 注 tar是打包 不是压缩 gz 解压1 gunzip FileNa
  • DBT乳腺切片投影及重建(MATLAB版)

    采用RadiAnt DICOM Viewer可以轻松读入图像 能读取理想的WW和WL值 衰减系数转HU的程序 water atten 0 150 自己设定的 f f water atten water atten 1000 HU转衰减系数的
  • 吴恩达机器学习笔记之神经网络参数的反向传播算法

    代价函数 回顾Logistic Regression中的代价函数为 神经网络的代价函数的基本思想与逻辑回归是一样的 但是形式上有一些差别 L表示神经网络的层数 sl表示l层神经网中的神经元的个数 K表示输出层的神经元的个数 正则项的计算包含
  • php实时股票,php股票数据分析源码

    1 股票指标源码 别名 彩色棒状线 所属类别 线型描述 参数数量 0 以零轴为中心画彩色棒状线 零轴下为阴线颜色 零轴上为阳线颜色 例如 CLOSE OPEN COLORSTICK 别名 分笔数量 所属类别 行情函数 参数数量 0 取得该周
  • 15 openEuler使用DNF管理软件包

    文章目录 15 1 搜索软件包 15 2 列出软件包清单 15 3 显示RPM包信息 15 4 安装RPM包 15 5 下载软件包 15 6 删除软件包 DNF是一款Linux软件包管理工具 用于管理RPM软件包 DNF可以查询软件包信息
  • 【八】springboot整合AOP实现日志操作(超详细)

    springboot篇章整体栏目 一 springboot整合swagger 超详细 二 springboot整合swagger 自定义 超详细 三 springboot整合token 超详细 四 springboot整合mybatis p
  • python机器人开发教程:学习如何使用Python编程创建机器人

    前言 我们学习一些如何使用 ChatterBot 库在 Python 中创建聊天机器人 该库实现了各种机器学习算法来生成响应对话 还是挺不错的 什么是聊天机器人 聊天机器人也称为聊天机器人 机器人 人工代理等 基本上是由人工智能驱动的软件程
  • DSA算法

    DSA 本文主要叙述在CTF中的DSA 根据我自己的理解重述一遍CTF wiki对DSA的描述 公私钥的生成 选择一个哈希函数 H H H 一般选作SHA1 选择比特数为