首页 > 其他分享 >第七章学习笔记

第七章学习笔记

时间:2023-06-10 17:01:15浏览次数:30  
标签:协议 Alice 笔记 认证 学习 密钥 第七章 攻击者 消息

第13章 密码协议导论

  • 建立安全密码协议最主要的挑战:设计者或实现者不能控制协议的过程
  • 设计密码协议的假设:在和攻击者打交道

13.1 角色

  • 单个实体可以充当协议中的任意一方角色

    (尤其是在分析协议安全性时)

13.2 信任

  • 信任的来源

    1.伦理道德

    2.名誉

    3.法律

    4.人身威胁

    5.MAD(共同毁灭原则):一种对于你自身和其他各方都会造成伤害的威胁

  • 信任不是非黑即白,存在不同的信任等级

  • 风险

    风险可看作是信任的对立,是商业交易的通常表现

13.3 动机

  • 动机机制是协议分析的一个基础部分

  • 保持开放的心态,试图去理解什么在驱使人们的行为,再对应地调整协议

13.4 密码协议中的信任

  • 密码协议的作用:最小化所需的信任的量(指最小化彼此信任的人数以及最小化人们需要信任其他人的程度)

    有利工具:偏执狂模型

  • 协议中每一点需要的信任都对应着一个需要解决的风险

13.5 消息和步骤

  • 一个典型的协议描述包括在协议参与者之间发送的消息数量以及每个参与者需要做的计算

  • 将注意力放在协议核心功能上的危险性:

    如果不对每个参与者应当进行的行为进行小心的规范说明,那么这会使得协议的安全实现变得非常难

  • 解决方案:进行模块化(modularization)

13.5.1 传输层

  • 传输层指让人们能够互相通信的底层通信系统

  • 在已经经过加密的信道上运行一个密码协议,传输层还提供了消息保密性、认证以及重放保护

13.5.2 协议标识符和消息标识符

  • 协议标识符一般包括两个部分:

    1.版本信息

    2.指定这个消息属于哪个密码协议

  • 消息标识符则是指出该标识符对应着协议的哪个消息

  • 作用:协议和消息标识符同样使得消息能够更加独立,从而使得大多数的维护和调试工作变得简单

    (引人消息标识符,我们可以避免一个消息认证时被解读到错误的上下文里)

13.5.3 消息编码和解析

  • 收者必须要能够解析看起来像一个字节序列的消息,将这个序列解析成其组成字段。这个解析不能被上下文信息影响。

  • 给字段编码的方法:使用TLV(Tag-Length-value)编码(或者XML)

13.5.4 协议执行状态

  • 为了记录协议的动向,需要某个形式来记录协议执行的状态,并需要包括完成协议所必需的所有信息

13.5.5 错误

-最安全的处理过程:不给这个错误发送任何回复,并且马上删除协议状态

弊端:会导致一个不友好的系统,因为这个系统没有任何错误提示

13.5.6 重放和重试

  • 重放攻击(replay attack):攻击者录下来一段消息,然后将这段消息重新发送出去

    特点:难以检测,类似于合法消息

  • 重试攻击(retry attack)

第14章 密钥协商

  • 目的:得到一个可以在安全信道里使用的共享密钥。

14.1 初始设置

  • 存在共享密钥的情况下进行密钥协商的原因:

    1.密钥协商可以将会话密钥和已经存在的(长期的)共享密钥分离开来

    2.共享密钥相对来说安全性比较弱(一些密码协商协议可以让一个很弱的密码变成一个很强的密钥)

14.2 初次尝试

14.3 协议会一直存在下去

成功的协议几乎会一直存在下去(不关心那些不成功的协议)
  • 不能给密钥协商协议指定一个固定的DH参数集合的原因:
    即使选择了很大的一个集合,未来可能会出现密码学方面的改进强迫去改变

14.4 一个认证的惯例

  • 一些协议会中断是因为它们忽略了特定数据字段的认证

  • 认证函数只会认证一个字节串。每个要认证的字节串必须从一个独特的识别符开始,这个识别符能够识别协议中这个认证器被使用的具体位置

14.5 第二次尝试

  • 不再使用固定的DH参数,只使用两条消息,不在任何地方直接使用认证密钥,并且认证惯例确保了被认证的字节串不相同

  • 问题:缺少了“活跃度”

    解决方法:随机选择一个元素让认证器进行计算

14.6 第三次尝试

  • 尽可能避免代数结构的使用

    原因:攻击者可能会找到某些办法来利用这个结构

  • 一个明显的解决方案是将最终的密钥进行散列,这样可以将它归约到一个固定的长度,并且也销毁了所有剩下的代数结构。

14.7 最终的协议

  • 优化:双方都使用合适的DH参数的缓存

    优点:节约了每次都要生成新的DH参数的时间,也节约了每次检查的时间

  • 优化过多可能会损坏原本的协议(但没有什么硬性的规则去判断)

14.8 关于协议的一些不同观点

14.8.1 Alice的观点

  • Alice相信她的确在和Bob对话,并且这个她产生的密钥只有她和Bob知道

14.8.2 Bob的观点

  • Bob确信Alice是唯一能够计算出k的人

14.8.3 攻击者的观点

14.8.4 密钥泄露

1.如果Alice仅仅丢失了她的认证密钥,但是密钥还没有被攻击者知道,那么她只是失去了继续运行胁议的能力

2.如果Alice失去了会话密钥但是还没有被攻击者得到,她就需要和Bob再运行一次密钥办商协议,再确定一个新的会话密钥

3.如果Alice的认证密钥泄露了,攻击者就可以从那个时间开始,到Bob被通知并停止接受Alice的认证为止,一直模仿Alice 的身份
  • 我们的协议总是能够针对密钥泄露的情况提供可能的最好的保护措施

14.9 协议的计算复杂性

  • 对于公钥长度来说,DH协议的计算成本几乎和一个RSA签名的计算成本相同。DH运算仍然是办议计算里的主体部分

    优化技巧:

    1.使用加法链启发式算法(addition chain heuristics),指数运算可以使用更少的乘法计算完成

    2.使用加法序列启发式算法(addition sequence heuristics)来同时计算,可以节约大约250次乘法计算

14.10 协议的复杂性

  • 协议太过复杂,很难记住。一旦没有完全理解这些协议,就几乎不可避免地会导致安全缺陷出现

  • 现实世界的系统里通常有很大的协议规范

  • 主要问题:协议没有什么好的模块化表示方法

14.11 一个小警告

  • 用批判性、怀疑性的眼光去看待所有协议,甚至用专业的偏执眼光来看待

14.12 基于口令的密钥协商

  • 目前的假设:存在一个认证系统使得密钥协商可以基于这个系统建立

  • 口令存在的问题使人们不会从一个很大的集合中选择,理想状态下我们想要一个窃听者也无法进行线下字典攻击的密钥协商协议

标签:协议,Alice,笔记,认证,学习,密钥,第七章,攻击者,消息
From: https://www.cnblogs.com/zlshsy/p/17471545.html

相关文章

  • Shellcode Execution in a Local Process with QueueUserAPC and NtTestAlert(nim学习
    ShellcodeExecutioninaLocalProcesswithQueueUserAPCandNtTestAlertAPC队列异步过程调用(APC)队列是一个与线程关联的队列,用于存储要在该线程上下文中异步执行的函数。操作系统内核会跟踪每个线程的APC队列,并在适当的时机触发队列中挂起的函数。APC队列通常用于实现线......
  • 使用Python预处理机器学习需要的手写体数字图像文件数据集
    封面图片:《Python程序设计实验指导书》,董付国,清华大学出版社=============问题描述:为演示机器学习算法对手写体数字识别与分类,需要准备大量数据,如果自己写的话需要很长时间,于是找很多同学帮忙,每位同学提供30张图片,每个图片包含一个数字的手写体,分别命名为0_1.png、0_2.png、0_3.png......
  • COMP9417 Machine Learning 机器学习
    COMP9417-MachineLearningHomework1:RegularizedRegression&NumericalOptimizationIntroductionInthishomeworkwewillexploresomealgorithmsforgradientbasedoptimization.Thesealgorithmshavebeencrucialtothedevelopmentofmachinelearnin......
  • js笔记_方法
    方法就是把函数放在对象的里面,对象只有两个东西:属性和方法varli={name:'li',birth:2000,age:function(){varnow=new.Date().getFullYear();returnnow-this.birth;}}//属性li.name//方法,一定带()li.age()......
  • js笔记_变量的作用域
    在JavaScript中,var定义变量实际是有作用域的。假设在函数体中声明,则在函数体外不可以使用,(非要想实现的话,后面可以研究一下闭包)functionli(){varx=1;x=x+1;//2}x=x+2;//uncaughtReferenceError:xisnotdefined如果两个函数使用了相同的变量名,只要在函数内......
  • uniapp-黑马优选学习01
    01.IDE使用HBuilderX02.scss/sass插件安装:为了方便样式的编写   地址: https://ext.dcloud.net.cn/plugin?name=compile-node-sass03.快捷键方案的设置、IDE主题色的设置、基本设置(ctlr加alt加逗号 :  ctrl+alt+, )    >>其它基本......
  • 机器学习——泰坦尼克号幸存者预测及分析
    1.项目背景泰坦尼克号: 是当时世界上体积最庞大、内部设施最豪华的客运轮船, 于1909年3月31日动工建造, 1912年4月2日完工试航.于1912年4月10日,在南安普敦港的海洋码头,启程驶往纽约,开始了它的第一次,也是最后一次的航行. 泰坦尼克号将乘客分为三个等级:三等舱位于......
  • js笔记_函数
    函数定义方式一绝对值函数functionabs(x){returnx;}else{return-x;}一旦执行到return代表函数结束,返回结果。如果没有执行return,函数执行完也会返回结果,结果就是undefined定义方式二varabs=function(x){if(x>=0)returnx;}else{return-x;}}function(x){.......
  • 5.26日学习总结之网络编程socket
    Pythonsocket编程在网络上的教程较少,菜鸟中也只是给出了一小段描述,在此我推荐白羽黑夜socket编程|白月黑羽(byhy.net)其中的描写非常详细,本人也是在此学习的。socket又被称作套接字,可以简单的看作是两个地址(ip,port地址)之间通过socket的函数来进行传递数据。socket在客户端......
  • redis集群部署(运维笔记)
    Redis是一个高性能的NoSQL数据库,由于其高性能和可靠性,越来越多的企业开始使用Redis。在生产环境中,Redis集群是必不可少的,因为它可以提供高可用性和可扩展性。本文将介绍如何在Linux环境下部署Redis集群。1.安装Redis首先,需要在每个节点上安装Redis。可以使用以下命令从Redis官方......