密码学系列之:SAFER
密码学系列之:SAFER
简介
分组密码是一个非常优秀的加密结构,很多常用加的加密算法使用的都是分组算法,比如DES。SAFER表示的也是一种分组密码算法。一起来看看吧。
SAFER简介
SAFER的全称是Secure And Fast Encryption Routine,在密码学中,SAFER主要是由James Massey(IDEA的设计师之一)代表Cylink公司设计的一组分组密码。
SAFER主要有四种类型分别是:SAFER K, SAFER SK ,SAFER+ 和SAFER++ 。
其中SAFER K 和 SAFER SK 是比较早期的设计,共享相同的加密函数,但是轮次和密钥调度是不一样的。
后面的SAFER+ 和SAFER++ 是作为AES算法的候选算法提交给NESSIE的。 SAFER系列中的所有算法都没有专利限制,可以免费使用。
SAFER K 和 SAFER SK
第一个SAFER密码是由Massey在1993年发布的SAFER K-64,具有64位块大小。 “K-64”表示64位的密钥大小。
因为64位的块太小了,不适合加密大的数据,所以第二年,Massey发布了支持128位的变体,叫做:SAFER K-128。
但是,Lars Knudsen和Sean Murphy发现这个版本存在一些问题,于是将密钥调度按照Knudsen的建议从新设计。这些变种算法分别被命名为SAFER SK-64和SAFER SK-128。
其中 “SK”代表"Strengthened Key schedule"也就是强化过的时间调度。
除此之外,还有一种40位块大小的变种算法SAFER SK-40。
我们使用一个图来看下SAFER K算法的基本流程:

从最上面开始,是明文的输入阶段,每个明文都被分成8块。
接着就是密钥混合阶段,在这个阶段,明文分别和子密钥进行加法模256或者XOR运算。
然后是替换阶段,将上一阶段生成的结果通过两个相反的S盒映射成为新的数据。
这两个S盒分别是由45x和log45这两个函数派生出来的。有想了解S盒的朋友可以参考 “密码学系列之:blowfish对称密钥分组算法” 一文。
然后是第二次的密钥混合阶段。
在第二次密钥混合阶段之后,会使用pseudo-Hadamard transform (PHT)来进行扩散。
这四个阶段组成了一轮加密。
SAFER+ 和 SAFER++
SAFER+ 和 SAFER++ 是对原有的SAFER加密算法的改进。他们是由亚美尼亚密码学家Gurgen Khachatrian(亚美尼亚大学)和Melsik Kuregian与Massey共同设计的。
SAFER + 是在1998年提出的,但是是以AES的候选算法提交的,它的块大小是128位。蓝牙的密钥是基于SAFER +的自定义算法来实现的(称为E21和E22),
SAFER ++ 是在2000年通过两个版本提交给NESSIE项目的,一个版本是64位,另一个版本是128位。
本文已收录于 http://www.flydean.com/safer/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
密码学系列之:SAFER的更多相关文章
- 密码学系列之:memory-hard函数
密码学系列之:memory-hard函数 目录 简介 为什么需要MHF Memory hard的评估方法 MHF的种类 MHF的密码学意义 memory-hard在MHF中的应用 简介 Memory ...
- 密码学系列之:碰撞抵御和碰撞攻击collision attack
密码学系列之:碰撞抵御和碰撞攻击collision attack 简介 hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击. 今天和大 ...
- 密码学系列之:feistel cipher
密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...
- 密码学系列之:memory-bound函数
密码学系列之:memory-bound函数 目录 简介 内存函数 内存受限函数 内存受限函数的使用 简介 memory-bound函数可以称为内存受限函数,它是指完成给定计算问题的时间主要取决于保存工 ...
- 密码学系列之:Merkle–Damgård结构和长度延展攻击
密码学系列之:Merkle–Damgård结构和长度延展攻击 简介 Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击.这个结构是一些优秀的hash算法,比如MD5,S ...
- <密码学系列>—信息安全威胁
懒惰等于将一个人活埋.--泰勒 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 点关注,不迷路! ...
- 密码学系列之:NIST和SHA算法
目录 简介 SHA1 SHA2 SHA3 简介 SHA算法大家应该都很熟悉了,它是一个用来计算hash的算法,目前的SHA算法有SHA1,SHA2和SHA3种.这三种算法都是由美国NIST制定的. N ...
- 密码学系列之:Argon2加密算法详解
目录 简介 密钥推导函数key derivation function Password Hashing Competition Argon2算法 Argon2的输入参数 处理流程 简介 Argon2 ...
- 密码学系列之:1Password的加密基础PBKDF2
目录 简介 PBKDF2和PBKDF1 PBKDF2的工作流程 详解PBKDF2的key生成流程 HMAC密码碰撞 PBKDF2的缺点 总结 简介 1password是一个非常优秀的密码管理软件,有了 ...
- 密码学系列——常见的加密方式(c#代码实操)
前言 说起加密方式,其实密码学的角度ASCII编码其实本身就是一种加密解密. 由于其公开,现在用于数字与字符的转换. 查看ASCII表可以去官网查查. 转换代码如下: static void Main ...
随机推荐
- vscode自定义运行和调试创建launch.json文件及项目独立配置文件
1.创建lauch.json文件 2.然后在项目目录中会自动创建.vscode的目录 3.在.vscode目录下创建settings.json项目独立配置文件 4.在settings.json中写入 ...
- mysql数据库jar包下载
1.mysql-connector-java-8.0.16.jar驱动包 链接:https://pan.baidu.com/s/1G1SfPP895wU6YvTOAcTxhA提取码:7r43 2.my ...
- jupyter notebook更改默认工作目录
jupyter notebook默认配置路径:C:\Users\Administrator\.jupyter\jupyter_notebook_config.py 如果找不到配置文件,可以生成一个 j ...
- instance must be started before calling this method
解决方法 检查zk的连接数: 端口号: 数据库连接配置: zk的连接配置: 如果都没有问题,就重启容器.
- SpringBoot与Thymeleaf入门级操作
使用Thymeleaf 三大理由: 简洁漂亮 容易理解 完美支持HTML5 使用浏览器直接打开页面 不新增标签 只需增强属性 学习目标 快速掌握Thymeleaf的基本使用:五大基础语法,常用内置对象 ...
- python代码,读取一个txt文件,将其中的每一行开头加上一个字母a,每一行的结尾加上一个字母b
with open('name.txt', 'r+') as file: lines = file.readlines() file.seek(0) # 将文件指针移回文件开头 file.trunca ...
- [Python] 端口转发代码分享
我的魔法被公司防火墙限制了,所以我只能让我的代理流量从我自己的服务器过一遍,但是服务器上面的客户端只能允许本机使用,不能开放公网访问,所以就想到了端口转发 但是网络上面找到的端口转发工具需要各种配置, ...
- Java面试挂在线程创建后续,不要再被八股文误导了!创建线程的方式只有1种
写在开头 在上篇博文中我们提到小伙伴去面试,面试官让说出8种线程创建的方式,而他只说出了4种,导致面试挂掉,在博文中也给出了10种线程创建的方式,但在文章的结尾我们提出:真正创建线程的方式只有1种,剩 ...
- vscode ctrl + 鼠标左键 点击 不进入组件,弹出一个框再点才进入的问题 目录名和vue文件名 开头不能大写 需从起生效
vscode ctrl + 鼠标左键 点击 不进入组件,弹出一个框再点才进入的问题 目录名和vue文件名 开头不能大写 需从起生效 就是这个,很讨厌,原来是开头不能大写字母的问题造成的. 小写字母就没 ...
- nginx proxy_set_header详解
proxy_set_header 是 Nginx 配置中的一个重要指令,特别是在使用 Nginx 作为反向代理时.该指令允许你修改由 Nginx 传递给代理后端的请求头.这对于确保后端应用程序能够接收 ...