读软件开发安全之道:概念、设计与实施08密码学(下)

1. 对称加密

1.1. symmetric encryption

1.2. 使用各方共享的密钥来隐藏数据

  • 1.2.1. 对称加密在本质上依赖共享密钥

1.3. 所有加密都是通过对明文进行转换,把明文消息(或者原始消息)变成无法识别的形式(也称为密文)​,从而隐藏原始消息内容的

1.4. 可逆的转换称为对称加密,因为只要知道密钥,我们就既可以进行加密,也可以进行解密

  • 1.4.1. 对称加密算法会使用密钥自定义消息的转换方法,从而建立安全的私人通信,双方首先需要对在通信过程中使用的密钥达成一致

  • 1.4.2. 解密算法也使用相同的密钥把密文转换成明文

1.5. 一次性填充

  • 1.5.1. one-time pad

  • 1.5.2. 它需要通信各方都提前同意使用一个秘密的、由随机位组成的字符串作为加密密钥

  • 1.5.3. 假如密钥是随机的,就代表各个消息位要么随机取反,要么保持不变,所以攻击者不可能在不知道密钥的情况下把密文还原回原始的消息

  • 1.5.4. 对消息中一半的位取反是最理想的消息隐藏方式,因为无论是保留还是反转消息中的大多数位都会在一定程度上揭示出消息的明文

  • 1.5.5. 一次性密钥的使用限制是大多数应用都不会使用这种加密方法的原因

    • 1.5.5.1. 密钥的长度限制了消息的长度

    • 1.5.5.2. Alice和Bob很可能事先完全不知道他们要加密的数据有多长,所以想要弄清楚他们需要多长的密钥也就很不现实

1.6. 高级加密标准

  • 1.6.1. Advanced Encryption Standard,AES

  • 1.6.2. 一种使用相当频繁的现代对称加密块加密算法

    • 1.6.2.1. 在块加密中,长消息会被分为多个块大小的数据段,短消息则会用随机位填充到块的大小
  • 1.6.3. 用相同的方式加密相同的消息也称为电子密码本(Electronic Code Book,ECB)模式

    • 1.6.3.1. 因为可能受到重放攻击的威胁,所以这种做法并不理想
  • 1.6.4. 把反馈信息或者其他差异性的内容引入后续的数据块,让生成的密文和前面数据块的内容或序列中的位置产生关联。这可以确保哪怕明文块完全相同,加密的密文还是截然不同

1.7. 使用对称加密

  • 1.7.1. 对称加密是现代加密算法的主力军,因为只要使用得当,这种加密算法既快捷又安全

  • 1.7.2. 加密可以对通过不安全信道进行传输的数据,以及存储设备中保存的数据提供保护

  • 1.7.3. 基本的限制

    • 1.7.3.1. 密钥的建立

      1.7.3.1.1. 加密算法依靠的是提前准备好的密钥,但是并没有明确指出如何建立这些密钥

    • 1.7.3.2. 密钥的建立

      1.7.3.2.1. 加密算法依靠的是提前准备好的密钥,但是并没有明确指出如何建立这些密钥

    • 1.7.3.3. 密钥的保密性

      1.7.3.3.1. 加密的有效性完全取决于我们能否维持密钥的保密性,同时还能在需要的时候使用密钥

    • 1.7.3.4. 密钥的长短

      1.7.3.4.1. 越长的密钥也就越安全(理论上最理想的密钥就是一次性填充密钥)​,但是维护长密钥的成本更高,而且使用长密钥的运算效率更低

1.8. 对于对称加密来说,签名是不可能实现的,因为通信的双方都知道密钥

2. 非对称加密

2.1. asymmetric encryption

2.2. 使用接收方拥有的密钥来隐藏数据

2.3. 非对称加密完全违背了我们对加密这件事的直觉,但非对称加密的强大恰恰源于此

2.4. 如果使用非对称加密,那么虽然Bob可以把加密的消息发送给Alice,但是他自己却无法解密这条消息

  • 2.4.1. 对Bob来说,加密就成了一个单向函数,只有Alice拥有执行逆运算(也就是解密消息)的密钥

2.5. 非对称加密会使用一对密钥,即用来加密的公钥(public key)和用来解密的私钥(private key)

  • 2.5.1. 非对称加密的这种做法是革命性的,它通过密钥的方式赋予了Alice独一无二的能力

2.6. RSA密码系统

  • 2.6.1. 数学背景最简单的初始非对称加密协议

  • 2.6.2. RSA的核心理念就是两个素数的相乘很容易计算,但是找到两个素数乘积的因数可就是难上加难了

  • 2.6.3. 明文攻击(chosen plaintext attack)可通过使用随机位填充消息来轻松挫败,让攻击者完全无从猜测加密的消息

  • 2.6.4. 以前,RSA算法对于大多数计算机来说都会占用相当多的计算资源,所以这种算法需要昂贵的定制硬件

  • 2.6.5. 如今,RSA正在被诸如椭圆曲线算法(elliptic curve algorithm)等逐渐取代

    • 2.6.5.1. 这类算法通过不同的数学模型来实现类似的功能,这类算法更加“物有所值”​,它们可以用更少的计算产生更加强大的加密能力

2.7. 因为非对称加密比对称加密需要消耗更多的计算资源,所以我们通常会选择用非对称加密的方法来处理随机密钥,然后用密钥来对消息本身执行对称加密

2.8. 非对称加密的安全性取决于是不是只有通信方知道自己的私钥,所以只有这个通信方可以用私钥来进行签名

  • 2.8.1. 因为验证工作只需要使用公钥就可以完成,所以这个过程不会泄露任何秘密

3. 数字签名

3.1. digital signature

3.2. 会根据只有签署方拥有的密钥来对数据进行认证

3.3. 公钥加密也可以用来创建数字签名,让接收方验证消息的真实性

  • 3.3.1. 签名本身和消息加密无关,但Alice的签名可以让Bob确信,这个消息确实是她发送的

  • 3.3.2. 数字签名也可以充当通信的证据,让Alice无法否认她曾经发送过这个消息

3.4. 真实性和不可抵赖性是通信中的两大重要安全属性,另一个则是机密性

3.5. 签名和加密是两个独立的过程,根据应用的不同,我们可以只进行签名、只进行加密或者两项操作都执行

3.6. 数字签名广泛应用于签署数字证书​、邮件、应用代码和合法文件,也广泛应用于保护各类加密货币(如比特币)​

3.7. 人们会对消息的摘要值进行签名,其目的是让一次签名操作就可以覆盖整个文档

4. 数字证书

4.1. digital certificate

4.2. 会根据对根证书的信任来对签署方进行认证

4.3. 公钥加密的优势在于它提供的便利性

  • 4.3.1. 它可以让我们用一把钥匙处理所有通信,而不需要为各个通信分别管理不同的密钥,只要我们把密钥宣告给全世界的任何人自由使用

4.4. 证书认证机构

  • 4.4.1. Certification Authority,CA

  • 4.4.2. 新的CA需要广泛地发布自己的公钥

  • 4.4.3. 操作系统和浏览器需要及时地预装一系列可靠的CA根证书(root certificate),这些证书都用CA对应的公钥进行了自签名

5. 密钥交换

5.1. key exchange

5.2. 让双方通过公开的信道来建立共享密钥,不管是否有人在窃听这个信道

5.3. 在RSA问世之后不久,怀特菲尔德·迪芙(Whitfield Diffie)和马丁·赫尔曼(Martin Hellman)开发了一个非常实用的密钥交换算法

5.4. 在互联网上建立安全通信信道(比如通过TLS协议)方面,密钥交换是一种特别方便的机制

5.5. 一旦拥有了共享密钥,双方就可以通过加密通信来建立安全的私有信道

6. 使用加密

6.1. 从密码学的角度来看,安全随机数增加了不可预测性,从而缓解了通过猜测进行的攻击

6.2. 摘要提供了一种安全的方式,可以提取唯一的数据来对原始数据执行完全性检查

  • 6.2.1. 安全摘要提供了一种理想的方式来验证数据是否遭到了改动,而不需要我们为数据保存一份完整的副本

6.3. 加密包括对称加密和非对称加密两种方式,其目的都是保护数据的机密性

  • 6.3.1. 在这些敏感数据进入前端Web服务器的一刹那就对所有入站敏感数据执行加密

  • 6.3.2. 在独立的站点同步保存加密的数据和密钥

    • 6.3.2.1. 一家企业希望把长期数据存储外包给第三方备份

    • 6.3.2.2. 他们可以把加密数据交接出去进行妥善保存,同时把密钥保存在自己的保险库中待用,以备他们需要从备份中恢复数据

  • 6.3.3. 加密也不是灵丹妙药

    • 6.3.3.1. 如果攻击者可以观测到加密数据或者其他元数据的频率或者规模,我们可能也会给攻击者泄露一些信息
  • 6.3.4. 加密的安全性依赖于数学上的未知领域,以及当前最先进的数字硬件技术,这两个领域仍在不断发展和进步

    • 6.3.4.1. 如果某位数学家未来发现了一种高效的方法可以破解当前的算法,这位数学家必然声名鹊起

    • 6.3.4.2. 不同类型计算技术(譬如量子计算)的前景也是另一个潜在的威胁

  • 6.3.5. 加密也和其他所有缓解方法一样,一定会包含一些取舍权衡和未知风险,但加密仍然是绝对值得一用的伟大工具

6.4. 数字签名是一种对消息进行认证的方式

6.5. 数字证书可以利用对CA的信任,来简化共享真实公钥的方式

6.6. 密钥交换完善了加密工具箱,让通信双方可以通过公共网络连接安全地远程协商密钥

6.7. 正确使用加密算法非常重要,因为你可以避免给对手提供发起这类攻击的机会

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408466.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 下命令行参数和环境变量

Linux 下命令行参数和环境变量 命令行参数为什么要有命令行参数谁可以做到结论 环境变量一些现象查看环境变量添加环境变量添加内存级环境变量永久有效 其他环境变量HOMEPWDSHELLHISTSIZE 自定义环境变量定义取消 本地变量整体理解环境变量环境变量的组织方式Linux 代码获取环境…

32 增加系统调用(1)

系统调用在 数据手册中的描述 这是在 GDT 中的描述符 这个系统调用 segment selector 指向的时 内核的代码段。因为系统调用需要的权限比较高。 offset 指的时 在内核代码中的具体的函数的地址。

深入浅出消息队列----【Broker 集群】

深入浅出消息队列----【Broker 集群】 单 master多 master多 master 多 slave 异步复制多 master 多 slave 同步复制Dledger 本文仅是文章笔记,整理了原文章中重要的知识点、记录了个人的看法 文章来源:编程导航-鱼皮【yes哥深入浅出消息队列专栏】 Brok…

ssrf攻击fastcgi复现

文章目录 环境搭建使用网页查看开始攻击 环境搭建 在/usr/local/nginx/html下新建一个php文件 phpinfo.php 1.php <?php highlight_file(__FILE__); $url $_GET[url]; $curl curl_init($url); curl_setopt($curl, CURLOPT_HEADER, 0); $responseText curl_exec($curl)…

Neo4J下载安装

Windows 版本 1、 下载链接安装JDK 下载链接 https://download.oracle.com/java/22/latest/jdk-22_windows-x64_bin.msi 下载完毕后默认安装即可 2、 下载Neo4J 进入Neo4j Deployment Center - Graph Database & Analytics下载页面&#xff0c;选择社区版&#xff0c;…

QT Quick QML 实例之定制 TableView

QT Quick QML 实例之定制 TableView 一、演示二、C关键步骤1. beginInsertRows()&#xff08;用户插入行&#xff09;2. roleNames() &#xff08;表格中列映射&#xff09;3. data() &#xff08;用户获取数据&#xff09;4. headerData() &#xff08;表头&#xff09;5. fla…

依靠 VPN 生存——探索 VPN 后利用技术

执行摘要 在这篇博文中,Akamai 研究人员强调了被忽视的 VPN 后利用威胁;也就是说,我们讨论了威胁行为者在入侵 VPN 服务器后可以用来进一步升级入侵的技术。 我们的发现包括影响 Ivanti Connect Secure 和 FortiGate VPN 的几个漏洞。 除了漏洞之外,我们还详细介绍了一组…

ETAS工具链自动化实战指南<二>

----自动化不仅是一种技术&#xff0c;更是一种思维方式&#xff0c;它将帮助我们在快节奏的工作环境中保持领先&#xff01; 目录 往期推荐 RTA-A2L工具概览 RTA-A2L的输出文件 常用命令行参数 场景1&#xff1a;通过 MCSD 文件来生成 .a2l 文件并更新地址 命令用法 命…

比Maven快2~10倍的编译工具mvnd简介与实战

概述 maven-mvnd&#xff0c;可简称&#xff08;或缩写&#xff09;mvnd&#xff0c;the Maven Daemon。Apache Maven团队借鉴Gradle和Takari后开发的更快的构建工具。mvnd内嵌Maven&#xff0c;开发者可无缝从Maven迁移到mvnd。 参考资料&#xff1a;GitHub。 mvnd中会启动…

【数据结构篇】~二叉树(堆)

【数据结构篇】~二叉树&#xff08;堆&#xff09; 二叉树1.树2.树的组成3.二叉树4.堆1.向上调整算法2.向下调整算法3.堆排序 4.topk问题源码 二叉树 1.树 树的概念与结构​ 树是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成一个…

BUG——GT911上电后中断一直触发

版型&#xff1a;正点原子 I.MX6UL MINI板 屏幕&#xff1a;7寸 1024*600 ATK-MD0700R V1.4 我的建议是买7寸屏幕就不要Mini板&#xff0c;因为Mini板太小装不下7寸屏幕&#xff0c;你需要一个更大的板子 简介&#xff1a; 算是作为一个后来者对这一现象的补充。解决方案就…

linux memory cgroup的memory.move_charge_at_immigrate含义

1.内核文档 上面的例子说明&#xff1a; 最开始某个进程是在cgroup A中&#xff0c;后面要迁移到cgroup B中&#xff0c;那么进程的内存计数是否要完全迁入B中&#xff0c;就是通过memory.move_charge_at_immigrate控制&#xff0c;如果目标cgroup也就是B设置了1到该字段中&am…

DBeaver安装使用

文章目录 简介支持的数据库支持的系统 下载安装DBeaver使用修改Maven下载jar地址窗口->首选项连接->驱动->Maven配置仓库地址 选择需要连接的数据库进行连接 简介 DBeaver 是一个通用的数据库管理工具和 SQL 客户端&#xff0c;支持 MySQL, PostgreSQL, Oracle, DB2,…

进存销系统

摘 要 伴随着我国全面推动信息化的趋势&#xff0c;我国的很多行业都在朝着互联网的方向进发。商品销售行业也有很多挑战。这次论文介绍的进存销系统就是为了能够解决当前传统商品进存销存在的问题&#xff0c;使得商品进存销能够更加有效率。电商智能化管理必不可少的帮手有进…

【VIsion Master】机器视觉软件二次开发(C#版本)学习笔记

0.前言 最近接手新项目&#xff0c;用海康威视旗下的HIK ROBOT Vision Master机器视觉软件做二次开发相关的项目&#xff0c;写一篇博客记录一下学习过程。 参考视频&#xff1a;https://www.bilibili.com/video/BV1tq4y1j7RP?p1 其他参考资料&#xff1a;软件自带的开发文档…

学习2d直线拟合-2

参考文章 直线拟合算法&#xff08;续&#xff1a;加权最小二乘&#xff09;_加权拟合直线法-CSDN博客 对比了参考文中和opencv中的直线拟合权重&#xff0c;不知道理解的对不对&#xff0c;前者是权重平方&#xff0c;后者没有平方 QtWidgetsApplication1::QtWidgetsApplic…

Excel中的“块”操作

在Excel中&#xff0c;有offset、index、indirect三个对“区域”操作的函数&#xff0c;是较高版本Excel中“块”操作的利器。 (笔记模板由python脚本于2024年08月20日 19:25:21创建&#xff0c;本篇笔记适合喜欢用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Pytho…

幅频特性曲线分析及使用WPF绘制

文章目录 1、一阶惯性环节的幅频特性曲线分析及绘制2、二阶系统的幅频特性曲线分析及绘制3、一般的系统4、上位机代码实现4.1 一阶惯性系统4.2 二阶系统 5、稳定裕度5.1 幅值裕度5.2 相角裕度 参考 1、一阶惯性环节的幅频特性曲线分析及绘制 这里的a和b可以根据系统的不同修改,…

网络udp及ipc内存共享

大字符串找小字符串 调试 1. 信号处理函数注册&#xff1a;•一旦使用 signal 函数注册了信号处理函数&#xff0c;该函数就会一直有效&#xff0c;直到程序结束或者显式地取消注册。2. 注册多次的影响&#xff1a;•如果多次注册同一信号的处理函数&#xff0c;最后一次注册的…

【记录】基于Windows系统安装rust环境的过程

到官网下载安装包【入门 - Rust 程序设计语言 (rust-lang.org)】 ![[Pasted image 20240703142911.png]] 选择1&#xff0c;快速安装 选择编译配置&#xff0c;1为标准 安装完成 验证是否安装完毕 rustc --versioncargo --version验证成功&#xff01;