严格来说,很少直接用口令来作为密钥使用,一般都是将口令输入单向散列函数,然后将得到的散列值作为密钥使用。...这种方法就是在使用共享密钥进行通信的过程中,定期改变密钥。例如,在更新密钥时,发送者和接收者使用单向散列函数计算当前密钥的散列值,并将这个散列值用作新的密钥。...尤其对于共享密钥来说,很多应用都需要将密钥保存在客户端,例如移动App,要么将密钥硬编码在代码里,或者保存在文件中,但无论哪种方式,应用一旦被反编译,密钥就存在泄漏的风险。...也就是说,P 的生成元的乘方结果与 1 ~ P-1 中的数字是一一对应的。...例如,消息认证码算法HMAC的设计就允许对单向散列函数的算法进行替换。在PGP中,对称密码、公钥密码、单向散列函数等都是可以替换的。
具体填充的步骤也分为三步:第一步在消息末尾添加一个1比特的数值“1”;第二步在添加了“1”之后的消息末尾不断添加0,直到消息的长度达到512比特的整数倍,但最后一个分组的最后64比特需要空出来;第三步将消息的长度换成二进制后添加到上一步空出来的最后一个分组的最后...单向散列函数在实际应用中很少单独使用,而是和其他密码技术结合使用。后面要讲的消息认证码和数字签名都使用了单向散列函数,而下一篇要讲的密钥、伪随机数和应用技术也都使用了单向散列函数。...消息认证码的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥,它可以输出固定长度的数据,这个数据称为 MAC 值。...消息认证码与单向散列函数很类似,都是根据任意长度的消息输出固定长度的数据,不同的是,消息认证码比单向散列函数多了一个共享密钥。...而为了更加简单起见,这里不使用单向散列函数,而是直接对消息进行签名。首先,需要将文本的消息先编码为数字,因为在RSA中,被签名的消息、密钥以及最终生成的签名都是以数字形式表示的。
前言 在之前的文章《深入浅出密码学(上)》中,笔者为大家简要介绍了密码学中的加密跟单向散列函数的概念与应用。...此外,在网络通信中数据还存在被篡改的风险,因此我们还需要有一种机制能够识别数据是否被篡改,而单向散列函数正是能够识别数据一致性或完整性的一种机制。...这种情况下小明收到的数据就是软件B1与散列值B2,而不是预期的软件A1与散列值B2了。...但是在这种情况下,小明计算软件的散列值跟收到的散列值进行对比仍然是一致的,虽然数据已经被攻击者小黑替换了,但是小明却无法察觉。所以说单向散列函数无法识别“伪装”。...最后一个局限性还是因为共享密钥导致的,在之前的文章《深入浅出密码学(上)》中,讲解了对称加密带来的一个问题就是密钥的配送问题,同理消息认证码同样也有密钥的配送问题,密钥配送的安全性决定了消息认证码的安全性
使用到的技术 为了保证信息传输的安全性,SSH使用了对称加密、非对称加密和散列等技术。 对称加密 对称密钥加密又称为对称加密、私钥加密、共享密钥加密,是密码学中一类加密算法。...这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。 SSH使用对称密钥加密整个连接过程中传输的信息。...因此,如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。 SSH在一些地方使用了非对称加密。 在密钥交换过程中使用到了非对称加密。...散列 散列是电脑科学中一种对资料的处理方法,它通过某种特定的算法将要检索的项与涌来检索的索引关联起来,生成一种便于搜索的数据结构(散列表)。...客户端使用解密后的数和会话使用的共享密钥得到一个值,然后计算这个值的MD5散列值。 7. 客户端将这个MD5散列值发送回服务端。 8. 服务端用会话共享密钥和生成的随机值计算得到自己的MD5散列值。
典型的散列函数 第一种:MD5(Message-Digest Algorithm 5):128位散列值。 第二种:SHA-1:作为散列数据的标准,SHA-1 可产生一个 160 位的散列值。...SHA-1 是典型的用于创建数字签名的单向散列算法 散列函数的特性: 1、散列函数算法公开 2、快速计算 3、对任意长度报文进行散列产生定长输出 4、对于任意报文无法预知其散列值 5、不同报文不会产生相同的散列值...报文(消息)认证的目的: ①消息源的认证,即验证消息的来源是真实的; ②消息的认证,即验证消息在传送过程中未被篡改。 报文摘要:对报文m应用散列函数H,得到固定长度的散列码。...SSL协议栈: 图片 SSL握手协议:在插、握手过程中需要用到SSL握手协议、SSL更改密码规格协议、SSL警告协议。...通过数据加密保证安全;数据进入隧道时,由VPN封装成IP数据报,通过隧道在Internet上传输;离开隧道后,进行解装,数据便不再受VPN保护。
加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出不论什么部分的原始信息。不论什么输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。...散列还应该是防冲突的,即找不出具有同样散列结果的两条信息。具有这些特性的散列结果就能够用于验证信息是否被改动。...单向散列函数一般用于产生消息摘要,密钥加密等,常见的有: l MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,非可逆,同样的明文产生同样的密文...在实际的操作过程中,我们通常採用的方式是:採用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的长处,既实现了加密速度快的长处,又实现了安全方便管理密钥的长处。...密钥管理:密钥是保密系统中更为脆弱而重要的环节,公钥password体制是解决密钥管理工作的有力工具;利用公钥password体制进行密钥协商和产生,保密通信两方不须要事先共享秘密信息;利用公钥password
密文的对称密码算法,密钥长度是56bit 规格上来说,密钥长度是64bit,但每隔7bit会设置一个用于错误检查的bit,因此密钥长度实质上是56bit 由于DES每次只能加密64bit的数据,遇到比较大的数据...才能完成解密 在发送密钥过程中,可能会被Eve窃取密钥,最后Eve也能完成解密 14.png 如何解决密钥配送问题 有以下几种解决密钥配送的方法 事先共享密钥 密钥分配中心 Diffie-Hellman...Cryptography) 在公钥密码中 加密密钥,一般是公开的,因此该密钥称为公钥(public key) 解密密钥,由消息接收者自己保管的,不能公开,因此也称为私钥(private key)...,单向散列函数都会计算出固定长度的散列值 19.png 20.png 1、单向散列函数的特点 根据任意长度的消息,计算出固定长度的散列值 计算速度快,能快速计算出散列值 消息不同,散列值也不同...全新标准 3、如何防止数据被篡改 23.png 24.png 4、单向散列函数的应用 – 防止数据被篡改 25.png 26.png 5、单向散列函数的应用 – 口令加密 27.png 七、数字签名 想象以下场景
这种交换导致服务器和客户端通过共享某些公共数据并使用某些秘密数据操纵它们而独立地到达相同的密钥。这个过程在稍后更详细地解释。...此过程创建的对称加密密钥是基于会话的,并构成了在服务器和客户端之间发送的数据的实际加密。一旦建立,其余数据必须使用此共享密钥加密。这在验证客户端之前完成。...使用相同的散列函数和消息应该产生相同的散列; 修改数据的任何部分应该产生完全不同的散列。用户不应该能够从给定的散列产生原始消息,但他们应该能够判断给定的消息是否产生给定的散列。...鉴于这些属性,散列主要用于数据完整性目的并验证通信的真实性。SSH中的主要用途是使用HMAC或基于散列的消息认证代码。这些用于确保收到的消息文本完好无损。...然后客户端将此MD5散列发送回服务器,作为加密号码消息的答案。 服务器使用相同的共享会话密钥和它发送给客户端的原始号码自行计算MD5值。它将自己的计算与客户发回的计算进行比较。
1) 密码学 机密性、真实性、完整性 plantext 明文 cipher 密钥 ciphertext 密文 散列函数 将任意长度的输入转化为定长输出的算法。抗原像性、抗第二原像性、强抗碰撞性。...HMAC:两轮 Hash,其中一个是密钥是“预共享密钥”。...发送方 1)求文档 Hash 值 2)对 结果散列 + hash 算法 + 其它元数据 进行编码 3)用私钥加密编码后的数据,形成签名 接收方 1)使用相同 Hash 算法计算文档散列 2)用公钥解密发送方的签名...如果协商的密钥交换算法是 RSA 密钥交换算法,那么服务器就无需发送这条消息,而是由 Client 通过在 ClientKeyExchange 中携带一个 46 字节的随机数作为预主密钥即可。...这个消息中很重要的一个字段是 verify_data, 其值是用协商得到的主密钥结合协商确定的 MAC 算法对所有按序排列的握手消息进行计算得到的散列值。
它是一种与密钥相关联的函数。 HMAC就是MAC的一种实现。 MAC有好几种实现方式 使用单向散列函数实现 比如HMAC。 使用分组密码实现 使用AES之类的分组密码可以实现消息认证码。...小明向小刚发起借款100元,在MAC中假设小明和小刚共享了密钥,小明通过密钥根据请求消息计算出了MAC,并将MAC和消息一起发送给小刚。 3....重放攻击的防护 制定唯一的序号 在每次消息中,添加一个唯一的序号,序号递增,这样计算出来的MAC每次都是不一样的,即使能够拿到消息和MAC,在第二次重放的时候,由于消息和MAC都应该发送变化,从而使重放攻击失效...随机数nonce 在双方通信之前,服务器先发送一个随机数给发送者,发送者在消息中包含这个随机数,并计算MAC值。因为每次请求的随机数都会变化,所以重发MAC攻击不成立。但是会增加额外的通信请求成本。...因为MAC是通过小明和小刚共享的密钥生成出来的,所以第三方机构只能确认这个MAC是由共享密钥生成的,但是不能确定是小明生成的还是小刚自己生成的。
对称性:DES使用同一个密钥进行加密和解密,这意味着发送方和接收方需要共享相同的密钥,并且保持密钥的机密性。 2. 分组加密:DES处理的是固定长度的数据块,而不是像流加密那样逐位处理。 3....散列(哈希)算法 散列算法是单向函数,将任意长度的数据映射为固定长度的输出,通常用于验证数据的完整性和创建数字签名。...例如,在区块链技术中,交易记录通过SHA-256或其他SHA算法进行散列,以确保链上的每个区块都是不可更改的。...HMAC的基本工作原理是将一个共享密钥与消息相结合,然后通过一个散列函数进行处理,得到的结果就是HMAC值。...将密钥与消息进行组合。如果密钥太短,则通过填充操作使其达到散列函数所需的块大小;如果密钥太长,则首先使用散列函数压缩密钥。 2. 使用散列函数处理组合后的数据。
可以简单的这样理解,MAC是在密码散列函数+共享密钥后算出的hash值,由于密钥是只有通信双方才知道的,那么就可以认为通过MAC得到的hash可以保障信息的完整性以及同时提供认证的能力。...在银行之间进行传递交易消息时,会用到MAC来确认消息的完整性以及对消息进行认证。在没有使用公钥密码进行密钥交换之前,消息认证码使用的共享密钥时靠人力通过11路来完成的。...密钥推测攻击:和密码散列码的暴力攻击是类似的,不再细说。...对密码散列函数的攻击:数字签名使用了密码散列函数,那么数字签名也面临同样的威胁。 利用数字签名攻击公钥密钥:这块好复杂,笔者研究明白再补充( ╯□╰ )。。。...很多场景下,传输的数据被限制在ASCII码表(https://tools.ietf.org/html/rfc20)以内,比如url中的字符是ASCII中很小的一部分。
对称加密,非对称加密和哈希 为了确保信息的传输,SSH在事务中的各个点采用了许多不同类型的数据操作技术。这些包括对称加密形式,非对称加密和散列。...此过程创建的对称加密密钥是基于会话的,并构成服务器和客户端之间发送的数据的实际加密。一旦建立,其余数据必须使用此共享密钥进行加密。这是在验证客户端之前完成的。...服务器可以使用此文件中的公钥来加密到客户端的质询消息。如果客户端可以证明它能够解密此消息,则表明它拥有相关的私钥。然后,服务器可以为客户端设置环境。 哈希 SSH利用的另一种形式的数据操作是加密散列。...使用相同的散列函数和消息应该产生相同的散列; 修改数据的任何部分应该产生完全不同的哈希。用户不应该能够从给定的哈希生成原始消息,但是他们应该能够判断给定的消息是否产生给定的哈希。...鉴于这些属性,散列主要用于数据完整性目的并验证通信的真实性。SSH中的主要用途是使用HMAC或基于散列的消息验证代码。这些用于确保收到的消息文本完整且未经修改。
常见对称加解密算法 对称加密算法是一种加密算法,使用相同的密钥来加密和解密数据。这些算法在保护数据安全性方面起着重要作用。...•特点: 由于密钥长度较短,已被认为不够安全,因此在许多情况下已被更安全的算法所取代。•用途: 在一些早期的安全应用中使用。...3.3 SHA-256 (Secure Hash Algorithm 256) SHA-256是SHA-2家族中的一员,它产生256位(32字节)的散列值。...3.5 bcrypt bcrypt是一种用于密码存储的散列算法,特别适用于存储用户密码。它采用了“盐”(salt)的概念,使相同的密码在不同用户之间有不同的散列值,提高了安全性。...密码学常见应用 密码学算法在许多领域有广泛的应用,包括: •数据加密: 用于加密敏感数据,以保护数据的隐私和安全。•数字签名: 用于确保数据的完整性、认证和非否认性,常见于电子合同和电子邮件安全中。
耗时性:计算散列值需要一定的计算时间。 散列函数应用密码存储:将用户密码通过散列函数计算得到散列值,然后将散列值存储在数据库中。...当用户登录时,再次计算输入密码的散列值并与数据库中的散列值进行比较,以验证密码是否正确。文件完整性校验:通过散列函数计算文件的散列值,并将其与文件发送方提供的散列值进行比较。...如果散列值相同,说明文件在传输过程中未被篡改。数字签名:在数据传输过程中,发送方使用散列函数计算数据的散列值,然后使用自己的私钥对散列值进行加密。...如果散列值相同,说明文件在传输过程中未被篡改。 Java示例我们使用Java的MessageDigest类计算输入字符串的MD5散列值。...需要注意的是,由于MD5的安全性较低,现已被更安全的散列函数(如SHA-256)所取代。在实际应用中,建议使用更安全的散列函数。
前言 在之前的文章《深入浅出密码学(上)》与《深入浅出密码学(中)》,笔者为大家介绍了密码学中的加密、单向散列函数与消息认证码的概念与应用。...而如果我们需要保证消息的完整性或一致性,则可以使用单向散列函数。而单向散列函数的局限性是无法对通信双方进行认证,即无法证明某条消息是某个人发出的,因此我们还需要消息认证码来解决消息认证的问题。...数字签名 在《深入浅出密码学(中)》一文中,我们知道消息认证码之所以无法防止否认,其原因是在消息认证码的使用过程中需要使用到共享密钥。...由于在通信的过程中,消息的体积可能非常大,如果直接对消息进行签名的话会非常耗时,所以在实际中用的比较多的还是对消息的散列值进行签名,在这里我们也只详细介绍对消息的散列值进行签名这种方式。...以下是对消息的散列值进行签名和验证的过程: ?
此散列值(即用户密钥)成为客户端和KDC共享的长期密钥(long term key)。 2.KRB_AS_REQ-客户端加密一个时间戳,然后发送给身份验证服务。...问题一:微软对长期密钥的散列值不加SALT 微软实现的Kerberos版本对MIT原始版本中的一个关键函数做了修改,最终降低了底层的安全性。...在MIT原始版本中,首先在明文口令中添加字符串username@DOMAIN.COM,然后经过散列运算生成长期密钥。使用用户名给密码加盐,能够为碰巧密码相同的不同用户生成不同的散列值。...从一个攻击者的角度出发,如果能够提取该域的密码散列值,也就可以利用KRBTGT散列值来伪造TGT。虽然提取散列值看似难以实现,然而实际上,大部分渗透人员认为在普通的企业环境中这并不是一件困难的事情。...使用Mimikatz插入NT-Hash 当散列值插入到内存中,我们擦除掉所有其他的密钥,因为这些密钥可能干扰我们获得指定的票据。留下的密钥只有上图中插入到镜像的RC4密钥。 ?
完整性(Integrity) 数据完整性是信息安全的三个基本要点之一,指在传输、存储信息或数据的过程中,确保信息或数据不被未授权的篡改或在篡改后能够被迅速发现。...在信息安全领域使用过程中,常常和保密性边界混淆。以普通RSA对数值信息加密为例,攻击者或恶意用户在没有获得密钥破解密文的情况下,可以通过对密文进行线性运算,相应改变数值信息的值。...例如交易金额为X元,通过对密文乘2,可以使交易金额成为2X。也称为可延展性(malleably)。为解决以上问题,通常使用数字签名或散列函数对密文进行保护。...第七步:还可以选择将这个hello的文件代入一个散列函数,得到一个散列值,然后对这个散列值用客户机的私钥进行加密,得到数字签名; 第八步:将加密后的密钥、利用对称密钥加密后的文件、对这个文件的签名,这三者加在一起的打包发送给服务器...,得到散列值;服务器的PGP程序再用客户机的公钥解密文件的签名,就得到了明文的hello这个文件的散列值,如果这个散列值和刚才对这个文件进行散列函数的运算得到的散列值相同,那么就说明了2个问题;第一,由于散列值相同
具体而言,它定义了以下几个方面的功能: Context 结构体:它是一个上下文对象,用于在计算散列时存储和管理状态。具体而言,它包含了散列算法名称、散列算法对象和用于计算散列的数据。...Hash 枚举:它定义了不同的散列算法类型。在这个枚举中,每个枚举成员都对应一个特定的散列算法。目前支持的散列算法有MD5、SHA1、SHA256、SHA512等。...在文件中你可能会看到以下工作过程: 首先,Context 结构体和 Hash 枚举会根据指定的散列算法进行初始化。...然后,文件中会定义一些与散列相关的操作函数,如计算散列(hash)、更新散列(update)和获取最终散列结果(finalize)等。...其中定义了用于存储公私钥、素数域的数据结构,以及包含生成密钥、计算共享密钥等方法的 trait。这些都是为了支持 Diffie-Hellman 密钥交换算法的功能。
分片- 分片只是一个包含部分数据的数据库服务器。数据库中的项目通过范围或散列分割为分片,我们将在本指南的后面部分进行说明。为简单起见,我们将在示例中使用两个单服务器分片。...配置服务器存储数据的状态和组织的元数据。这包括有关数据块位置的信息,这很重要,因为数据将分布在多个分片中。 我们将使用副本集来确保元数据的完整性,而不是使用单个配置服务器。...当应用程序将执行许多复杂的读查询时, 在适当使用时, 基于范围的分片通常是更好的选择。 基于散列的分片通过在分片键上使用散列函数来分配数据,以便在分片之间更均匀地分配数据。...在基于散列的分片设置中,您可以选择客户ID号,例如,作为分片键。此数字由散列函数转换,散列的结果决定了数据存储在哪个分片上。...在集合级别启用分片 现在数据库可用于分片并且我们选择了策略,我们需要在集合级别启用分片。这允许集合中的文档在分片中分发。为简单起见,我们将使用基于散列的分片策略。
领取专属 10元无门槛券
手把手带您无忧上云