当前位置: 首页 > news >正文

DLMS/COSEM中的信息安全:加密算法(下)2

4.4数字签名

        数字签名是电子模拟手写的签名,可以用来给收件人或第三方证实消息已由发起人签名(不可抵赖性)。也可能产生数字签名用于存储数据和程序,在以后的时间,可以进行验证这样的数据和程序的完整性。

        数字签名验证签名数据的完整性和签名人身份。数字签名在计算机上表示为一串比特,用数字签名算法计算数据签名,数字签名算法提供产生和验证签名的能力。签名生成使用私钥生成数字签名。签名验证使用相对应的公钥,但是和私钥不一样,来验证该签名。每个签字人拥有私钥和公钥对。仅由签字人的私钥的拥有者执行签名生成。然而,任何人都可以采用签字人的公钥验证签名。数字签名系统的安全性依赖于签字人私钥的保密性的保持。因此,用户应防止未经授权获取其私钥。 

        图19描绘了数字签名过程。在签名生成过程中使用哈希函数来获得要签名的数据的压缩版本,称为消息摘要或散列值。然后将消息摘要输入到数字签名算法以生成数字签名。数字签名与签名数据(通常称为消息)一起发送到预期的验证者。消息和签名的验证者使用签字人的公钥验证签名。在验证过程中也应使用相同的哈希函数和数字签名算法。可以使用类似的过程来生成和验证用于存储和发送的数据的签名。 

4.5椭圆曲线数字签名(ECDSA)

        椭圆曲线数字签名算法(ECDSA)使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟。它基于椭圆曲线离散对数问题(ECDLP)的难解性,具有密钥短、速度快和安全性高的优点。与传统的离散对数问题(DLP)和大数分解问题(IFP)不同,椭圆曲线离散对数问题没有亚指数时间的解决方法,因此椭圆曲线密码的安全性更高。 

        对于DLMS/COSEM,已经选择了FIPS PUB 186-4:2013中规定的椭圆曲线数字签名(ECDSA)算法。NSA1提供实施指南。

        在DLMS/COSEM中,使用的椭圆曲线和算法应是:

        ——在安全组件1的情况下,椭圆曲线P-256和SHA-256哈希算法;

        ——在安全组件2的情况下,椭圆曲线--384和SHA-384哈希算法。

        ECDSA数字签名生成的输入如下:

        ——要签名的消息M;【注:在DLMS/COSEM语境中,“消息”可以是xDLMS APDU或COSEM数据。】 

        ——签名人的私钥,d。

        输出是M上的ECDSA签名(r,s)。

        在DLMS/COSEM中,应使用明文格式:签名(r,s)被编码为八位位组串RIIS,即作为八位位组串R=12OS(r,l)和S=I2OS(s,l)的串联,其中l=[log_{256}n]。因此,签名具有2l八位位组的固定长度。

        ESDSA数字签名生成的验证的输入如下:

        ——签名的消息M’;

        ——接收的ECDSA签名(r',s');

        ——签名人的认证公钥,Q。

生成和验证签名的过程应符合NSA1,3.4中的规定。

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 批发行业进销存-登录适配 android 横竖屏幕 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构
  • 基于 Redis 的分布式锁 Spring Boot 集成 Redisson 使用分布式锁确保对共享资源的互斥访问
  • 【深度学习】【语音】TTS,StyleTTS 2,论文
  • Android中的沉浸式丝滑转场之共享元素转场动画
  • 机器学习之主成分分析(PCA)
  • Mipi SoundWire Spec 详解4.1
  • sql注入复现(1-14关)
  • linux下的C++程序
  • 【Linux】常见指令
  • 无人机挂载抓捕网
  • 基于Python的数据科学系列(1):Python基础
  • Android HandlerThread泄漏FD问题
  • 学习笔记五:在k8s中安装EFK组件
  • Java多商户新零售超市外卖商品系统
  • Project Euler_Problem 587_Concave Triangle (背包问题)
  • Google 是如何开发 Web 框架的
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【RocksDB】TransactionDB源码分析
  • Android单元测试 - 几个重要问题
  • Apache Spark Streaming 使用实例
  • canvas 绘制双线技巧
  • ECMAScript入门(七)--Module语法
  • ECS应用管理最佳实践
  • exif信息对照
  • iOS 颜色设置看我就够了
  • JavaScript对象详解
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • PHP CLI应用的调试原理
  • Vim Clutch | 面向脚踏板编程……
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 区块链将重新定义世界
  • 深度学习中的信息论知识详解
  • 手写一个CommonJS打包工具(一)
  • 探索 JS 中的模块化
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ionic入门之数据绑定显示-1
  • ionic异常记录
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 阿里云ACE认证学习知识点梳理
  • 国内开源镜像站点
  • #define,static,const,三种常量的区别
  • $$$$GB2312-80区位编码表$$$$
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)Hilt的基本概念和使用
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (JS基础)String 类型
  • (pytorch进阶之路)扩散概率模型
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (三)elasticsearch 源码之启动流程分析
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务