定义:

PBE是一种根据口令生成密钥并用该密钥进行加密的方法。

加密和解密都使用同一个密钥。

口令一词多义:

  1. 口头话,如喊口令;
  2. 暗号,如对口令;
  3. 专指密码,如邮箱口令(本文指这个,一般由英文大小写字母和数字和特殊符号组成)。

为什么需要PBE?

我们在使用数据的加密的时候,都难以避免地要涉及到密钥的保存,如果密钥如果明文地保存在电脑上那么很容易就会被别人盗取,那么如果我们使用另外一个随机密钥去加密会话密钥的话,那么怎么保证另一个密钥的安全?很明显这样下去就会无线循环了。

这个时候,我们需要考虑如何安全地保护密钥。对于我们人来说,我们不喜欢去记数字和字符,但是我们可以记下些短的口令,这比起动作百来位的密钥来说可好记多了,所以就出现了PBE(Password Based Encryption,基于口令加密)。

我们通过对口令和一些随机数结合进行加工,将它转变为一个用来加密会话密钥的密钥,将会话密钥进行加密之后然后将加密后的密钥进行保存。这个生成的加密密钥的密钥其实就可以将其抛弃了,留在电脑上还可以有泄露密钥的风险。

我们最后如果要还原会话密钥,只要将随机数和我们脑子中记住的口令进行相同的操作,就可以还原会话密钥。别人没有我们脑子中的口令就不能拿到会话密钥。

流程

加密流程

PBE加密包括下列3个步骤:

  1. 生成 主密钥(KEK) ;

    伪随机数生成器会生成一个盐(随机数),将口令一起输入单向散列函数,得到的散列值就是用来加密密钥的密钥(KEK)

  2. 生成 会话密钥(CEK) 并 加密;

    伪随机数生成器会生成一个随机数,这个随机数就是用来加密消息的密钥(CEK);

    用KEK加密CEK得到CEK密文;

    CEK密文一起保存到安全的地方;

    KEK可以丢弃掉,因为通过盐和口令可以重建KEK。

  3. 加密消息。

    CEK消息进行加密得到消息的密文

解密流程

PBE解密包括下列3个步骤:

  1. 重建KEK;
  2. 解密会话密钥;
  3. 解密消息。

详细流程反推回来即可。

盐的作用

是用来防御字典攻击的。

字典攻击是一种事先进行计算并准备好候选密钥列表的方法。

事先指在攻击者窃取到加密的会话密钥之前,就准备好了大量的候选KEK。


通过拉伸来改良PBE的安全性

在生成KEK时,通过多次使用单向散列函数就可以提高安全性

对于用户来说,执行1000次单向散列函数并不会带来多大的负担,然而对于主动攻击者来说,这可是一个很大的负担。


如何生成安全口令的建议

  1. 使用只有自己才能知道的信息;
  2. 将多个不同的口令分开使用;
  3. 有效利用笔记;
  4. 理解口令的局限性;
  5. 使用口令生成和管理工具。

基于口令的密码—PBE的更多相关文章

  1. 基于口令的密码(PBE)

    基于口令的密码(PBE) 基于口令的密码(Password Based Encryption,PBE)是一种基于口令生成密钥,并使用该密钥进行加密的方法.其中加密和解密使用的是同一个密钥. 根据用户自 ...

  2. android基于口令加密快速搞懂(一)

    import java.util.Random; import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypt ...

  3. 基于Hadoop的密码安全级别验证

    学习Hadoop有一段时间了,期间写过很多Demo,都是针对单个知识点做的验证,今天写个完整的应用程序——基于Hadoop的密码安全级别验证. 在很多网站上注册用户时输入密码都会在下方提示密码安全级别 ...

  4. Oracle OS认证 口令文件 密码丢失处理

    Oracle OS认证 口令文件 密码丢失处理 分类: Oracle Basic Knowledge2009-10-19 14:24 5031人阅读 评论(9) 收藏 举报 oracleos数据库sq ...

  5. (转)passwordStrength 基于jquery的密码强度检测代码使用介绍

    使用很简单. 代码如下: $('#pass').passwordStrength();  XHTML 代码如下: <p><label>请输入密码:</label>  ...

  6. 基于Python的密码生成程序的优化

    近期刚刚组织完内部的Python基础培训.GUI的开发培训,之后布置的作业是两人一组,利用前面所写的一些模块做一些小软件. 具体就是模拟Advanced Password Generator这个软件的 ...

  7. spring boot基于DRUID数据源密码加密及数据源监控实现

    前言 随着需求和技术的日益革新,spring boot框架是越来越流行,她也越来越多地出现在我们的项目中,当然最主要的原因还是因为spring boot构建项目实在是太爽了,构建方便,开发简单,而且效 ...

  8. 基于python的密码字典生成器

    最近在网上看到一些作品,然后对其进行了一些完善.只是用于学习,不要去干坏事哦.程序来源于网络,我只是做了一些优化. #!/usr/bin/python# -*- coding:utf-8 -*-# @ ...

  9. sshd服务以及基于口令的远程登陆

    ssh用为客户端,主要进行服务器端的连接:sshd用为服务器端 几个常用的命令: systemctl              ##服务控制命令   systemctl start sshd   ## ...

  10. openssl命令使用

    openssl openssl是个密码工具集,提供多端接口调用方式 组成: 1. 代码库 libcryto ,libssl(ssl/tls) 2. 工具集 openssl 对称加密 对称加密主要是用a ...

随机推荐

  1. Atcoder ABC392F Insert 题解 [ 绿 ] [ 线段树二分 ] [ 倒序操作 ]

    Insert:绷不住了,ds 学傻了导致一直在写一个假的没边的做法,赛后 5min 胡出正解,唐. 思路 首先正着操作想想就觉得不太好搞,所以考虑一个经典 trick:单点正向加入操作转化为倒序删除操 ...

  2. oh-my-bash在git大仓库下的卡顿问题解决方案

    使用oh-my-bash的同学都知道,在cd进入一些git大仓库的时候,oh-my-bash会贴心的帮你扫描一遍 然后你就卡那(nei)了... (风中凌乱.jpg) 本文告诉大家一种关闭git扫描的 ...

  3. STM32中如何使用printf()函数

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 在STM32串口通信程序中使用printf发送数据,非常的方便.可在刚开始使用的时候总是遇到问题,常见的是硬件访 ...

  4. MDK Debug时No target connected,STM32 ST-LINK Utility连接不上单片机的解决办法“Can not connect to target!”

    芯片下载程序成功,再次下载时出现,以下错误. 点击确认后,如下提示. 或提示如下. 不管怎么设置都侦测不到芯片. 使用STM32 ST-LINK Utility连接单片机时提示下边错误 "C ...

  5. Typecho博客添加音乐外链支持Https

    首先选个音质和音乐比较全面的音乐站,这里选了网易云音乐,自己手机用的网易云音乐app,存了好多歌单,所以就选他了,但是想获取音乐文件链接,得去这儿:季春二九音乐站 其实很简单,参考下面. 1.先找到网 ...

  6. luogu-P3262题解

    简要题意 有一棵不超过十层的满二叉树,需要对每个节点进行染色.每个叶子节点会对其颜色相同的祖先节点产生贡献且黑白贡献不同.求最大贡献. 题解 首先我会暴力!我如果直接暴力枚举每个节点的颜色,复杂度就是 ...

  7. 从文件到块: 提高 Hugging Face 存储效率

    Hugging Face 在 Git LFS 仓库 中存储了超过 30 PB 的模型.数据集和 Spaces.由于 Git 在文件级别进行存储和版本控制,任何文件的修改都需要重新上传整个文件.这在 H ...

  8. python 二级 组合数据类型

    1.集合特点 set 使用{}表示 无序 内容不重复 2.集合的操作:&.!.-.^ 序列特点 有序 4.序列常用的函数 5.列表函数 6.列表方法 s=[1,2,3] a=[5,6] 增加: ...

  9. 通过Kube-rbac-proxy保护 Kubernetes 工作负载中的应用容器

    1.概述 kube-rbac-proxy 是 Kubernetes 生态中一个专注于"基于角色的访问控制(RBAC)"的轻量级代理组件,通常以 Sidecar 容器的形式部署在 P ...

  10. SpringBoot+微信支付-JSAPI{微信支付回调}

    引入微信支付SDK Maven: com.github.wechatpay-apiv3:wechatpay-java-core:0.2.12 Maven: com.github.wechatpay-a ...