读软件开发安全之道:概念、设计与实施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.mzph.cn/web/51246.shtml

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

相关文章

我的CSDN-----第128天创作纪念日

机缘 起初的我,是为了在学习代码的过程中通过写博客的方式来巩固自己的知识。后来在遇到不会的问题时可以在csdn上面查找,寻求一点思路,将学到的知识通过博客的方式呈现出来。 收获 每当发布一篇博客后,就会收到很多人的评论加关…

Adobe Animate (AN)软件安装,硬件配置(附安装包)

目录 一、Adobe An 软件简介 Adobe An 软件的特点 Adobe An 软件的优势 下载 二、Adobe An 软件安装 安装前的准备工作 安装过程中的注意事项 安装后的设置 三、Adobe An 软件使用 高级动画技巧 交互设计 优化与性能提升 四、Adobe An 软件快捷键 选择工具快捷键…

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

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

【机器人学】7-2.六自由度机器人自干涉检测-计算圆柱体的上下圆心坐标【附MATLAB代码】

目录 前言 机械臂几何参数 机器等效圆柱体坐标确定 MATLAB代码 前言 上一章介绍了机器人自干涉检测的总体算法,提出了算法的三个核心: 一 根据机械臂的几何数据以及DH参数,确定机械臂等效的圆柱体的上下圆心坐标。 二 将一个圆柱体旋转到…

vue.js - 看板娘 Live2d

文中的资源文件在这里:我的资源中,打好包了已经,地址:live2d资源 1、在项目的 src/assets 文件夹中,添加 live2d 的资源文件 2、在 src/components 文件中,编写 live2d的index.vue组件 3、在 App.vue 中…

【重点】人工智能大语言模型技术发展研究报告2024|附下载

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力,正在引发经济、社会、文化等领域的变革和重塑。 2023 年以来,以ChatGPT、GPT-4 为代表的大模型技术的出台,因其强大的内容生成及多轮对话能力,引发全球新…

MYSQL————数据库的约束

1.约束类型 1.not null:指示某列不能存储null值 2.unique:保证某列的每行必须有唯一值 3.default:规定没有给列赋值时的默认值 4.primary key:not null和unique的结合。确保某列(或两个或多个列的结合)有唯…

聊聊最近很火的后端即服务

最近,你可能经常听到“后端即服务”(Backend as a Service, BaaS)这个词。不论是在技术论坛上,还是在开发者社区,BaaS都成了大家讨论的热点。究竟是什么让这个概念如此火爆?今天我们就来聊聊这个话题&#…

TCP粘包和抓包

在 TCP 套接字中,发送和接收缓冲区用于暂存数据,以确保数据的可靠传输。具体来说,TCP 的 socket 收发缓冲区的主要特点和概念如下: 1. 发送缓冲区(Send Buffer) 定义: 发送缓冲区用于存储待发送的数据。应…

大模型从入门到精通——词向量及知识库介绍

词向量及知识库介绍 1.词向量 1.1 什么是词向量 词向量是一种将单词表示为实数向量的方式。每个单词通过一个高维向量来表示,向量的每一维都是一个实数,这些向量通常位于一个高维空间中。词向量的目标是将语义相似的单词映射到相邻的向量空间中&#…

自定义@ResponseBody以及SpringMVC总结

文章目录 1.需求分析2.目录3.自定义ResponseBody注解4.MonsterController.java5.Monster.java 实现序列化接口6.引入jackson7.Adapter.java 如果有ResponseBody注解就返回json8.测试9.SpringMVC执行流程 1.需求分析 2.目录 3.自定义ResponseBody注解 package com.sunxiansheng…

24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

目录 198. 打家劫舍题目描述题解 213. 打家劫舍 II题目描述题解 337. 打家劫舍 III题目描述题解 打家劫舍的一天 😈 198. 打家劫舍 点此跳转题目链接 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷…

(贪心) LeetCode 135. 分发糖果

原题链接 一. 题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xf…

OpenCV与AI深度学习 | 基于改进YOLOv8的景区行人检测算法

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:基于改进YOLOv8的景区行人检测算法 作者:贵向泉,刘世清,李立等 来源:《计算机工程》期刊 编…

docker应用

打包传输 1.将镜像打包 #查看帮助文件 docker --help #找到save,可以将镜像保存为一个tar包 docker save --help #查看save使用方式 #查看现有的镜像 docker images # docker save --output centos.tar centos:latest ls ...centos.tar... 可以将tar发送给其他用户…

class_4:条件语句和逻辑运算符

mood_index int(input("对象今天的心情怎么样!"))if mood_index > 80:print("今天可以好好happy一下了")print("O(∩_∩)O哈哈~") else:print("今天还是乖乖的吧!否则小命不保") #BMI 体重 /(身…

css实现闪烁渐变背景,@property自定义属性

自 2024 年 7 月起,此功能适用于最新的设备和浏览器版本。此功能可能无法在较旧的设备或浏览器中使用。 property 是 CSS 中一个相对较新的功能,主要用于定义自定义属性(即 CSS 变量)的类型、继承性以及初始值。它允许开发者更好地…

Linux --- 文件系统

1. 文件系统的概念 Linux 文件系统是一种用于管理、存储和组织数据的层次结构,用于在 Linux 操作系统中管理磁盘上的数据存储。它定义了如何在存储介质(如硬盘、固态硬盘或 USB 闪存)上组织文件和目录,以及如何读取、写入和操作这…

java整合DL645-2007与Dl645-1997

注意事项: 前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,有些没有FE的,也有4个FE的,所以对于接受程序,一定要慎重传输次序-所有的数据项都是先传低字节,…

鸿蒙HarmonyOS实战:IPC与RPC设备内进程通信

基本 IPC(Inter-Process Communication)与RPC(Remote Procedure Call)用于实现跨进程通信,不同的是前者使用Binder驱动,用于设备内的跨进程通信,后者使用软总线驱动,用于跨设备跨进…