原作者论文请参考《The SKINNY Family of Block Ciphers and Its Low-Latency Variant MANTIS》

地址为:https://link.springer.com/chapter/10.1007/978-3-662-53008-5_5

代码及资源分析等参见:https://sites.google.com/site/skinnycipher/home

SKINNY 和 AES 类似,都是SPN结构的加密算法。

本文中截图多来自上述论文。

一、整体流程

  其中包括5个步骤,分别为字节替换、轮加常数、轮加密钥、行移位、列混淆

  SKINNY有一下几种模式:

  

  其中,n为明文长度,有64位和128位两种;对于每种明文,密钥有3种形式n/2n/3n,即64/128位、64/128 * 2位、64/128 * 3位;对应的模式下,分别运行32、36、40...轮。

  首先,将明文划分为16份,若明文为64位,则每份半个字节;若为128,每份一个字节。

  

  可变长度的密钥为以下形式,tk = tk0 tk1 ... tk16z-1 ,这里 z = 1, 2, 3。令0≤i≤15,当 z = 1 有TK1i = tki,当 z = 2 有TK1i = tk16+i,当 z = 3 有TK1i = tk32+i。

  1. 字节替代(Subbyte)

  字长有4bit和8bit两种,分别有对应的SBOX,对于4bit形式,有如下SBOX,

  

  上述4-bit SBOX可以用或非门和异或门实现,如下操作:

   

  对于4-bit和8-bit S盒,有如下结构:

  

   对于8-bit S盒有以下操作,首先,

  

  然后进行位置换,

  

  重复以上步骤4次,但是在最后一次时仅对x1和x2置换。

  2. 加常数(AddConstants)

  6位的线性反馈移位寄存(LFSR)来产生常数,按以下方式更新:

  

  LFSR的初始值为000000,在进行AddConstants操作前,进行更新。如进行第一轮AddConstants操作前,先进行000000→000001。

  然后,

  

  

  得到矩阵,将此矩阵加到状态矩阵上。

  

  3. 轮密钥加(AddRoundTweakey)

  密钥的第一行和第二行和状态矩阵相应的位置异或,对于 i = {0,1} 和 j={0,1,2,3},有以下操作:

  

  然后将密钥按下图更新:

  

  其中,置换函数PT 为:

  

  即(0,...,15)→ (9,15,8,...,5,6,7),其中数字代表密钥矩阵的单元;

  4. 行移位(ShiftRows)

  

  矩阵第0行不变,第1行循环右移1个字节,第2行循环右移2个字节,第3行循环右移3个字节,可等效为以下字节置换操作;

  

  5. 列混淆(MixColumns)

  M * IS,其中,

  

若NSi表示更新后的第i行,Si表示更新前的第i行,参考以上形式,有

 

    

    

SKINNY加密算法详解(无代码,仅加密)的更多相关文章

  1. Python - 元组(tuple) 详解 及 代码

    元组(tuple) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17290967 元组是存放任意元素集合,不能修 ...

  2. Python - 字典(dict) 详解 及 代码

    字典(dict) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17291329 字典(dict)是表示映射的数据 ...

  3. 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...

  4. C#的String.Split 分割字符串用法详解的代码

    代码期间,把代码过程经常用的内容做个珍藏,下边代码是关于C#的String.Split 分割字符串用法详解的代码,应该对码农们有些用途. 1) public string[] Split(params ...

  5. laravel 框架配置404等异常页面的方法详解(代码示例)

    本篇文章给大家带来的内容是关于laravel 框架配置404等异常页面的方法详解(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在Laravel中所有的异常都由Handl ...

  6. Android java程序员必备技能,集合与数组中遍历元素,增强for循环的使用详解及代码

    Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For ...

  7. .NET DLL 保护措施详解(非混淆加密加壳)

    为什么要保护DLL,我就不多说了,各人有各人的理由.总的来说,就是不想核心逻辑泄露及授权验证被破解两大方面的因素.市面上的混淆加密工具对.NET源码保护的效果天差地别,很多网上下到的混淆工具破解版对. ...

  8. UIWebView用法详解及代码分享

    今天我们来详细UIWebView用法.UIWebView是iOS内置的浏览器控件,可以浏览网页.打开文档等 能够加载html/htm.pdf.docx.txt等格式的文件. 用UIWebView我们就 ...

  9. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

随机推荐

  1. django母版页的使用

    母版页用于处理html页面相同部分内容,避免在不同的页面中重复出现 1.添加母版页 再manage.py文件相同目录下添加templates文件夹用于保存母版页html文件 2.添加母版页Base.h ...

  2. 关掉 ubuntu bug 报告功能

    想关掉这个: 通过服务加配置文件关掉

  3. openSUSE搭建OpenVPN

    目录 openSUSE搭建OpenVPN 环境 安装openVPN服务端 安装easy-rsa工具 配置vars文件 创建服务端证书及key 创建客户端证书 疏理证书文件 服务端配置 启动openvp ...

  4. JFreeChart柱状图单组柱子的不同颜色显示

    JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法. 实现效果如下 ...

  5. 描述整体程序的 app

    一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下 app.js文件 App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等.object参数说明如下 ...

  6. 转://对于11gR2的集群relink

    对于11gR2的集群relink参考MOS:Do I need to relink the Oracle Clusterware / Grid Infrastructure home after an ...

  7. linux(centos 7)下安装elasticsearch - head插件(端口占用,防火墙关闭)

    本文章来自网络仅供个人学习记录之用 一:安装Git(如果未安装) 1, yum install git 2, git --version #查看版本 二:安装node(如果未安装) node安装 三: ...

  8. YOLO2 (3) 快速训练自己的目标

    1快速训练自己的目标 在 YOLO2 (2) 测试自己的数据 中记录了完整的训练自己数据的过程. 训练时目标只有一类 car. 如果已经执行过第一次训练,改过一次配置文件,之后仍然训练同样的目标还是只 ...

  9. 遇到的web请求错误码集合与解释

    302 临时移动.与301类似.但资源只是临时被移动.客户端应继续使用原有URI

  10. nodejs写入json文件,格式化输出json的方法

    假如我需要把data序列化成json字符串,然后写入data.json文件中,代码如下: let str = JSON.stringify(data) fs.writeFile('data.json' ...