原作者论文请参考《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. 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程

    简介        大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...

  2. VRS生成的虚拟观测值存在的问题

    目前生成的虚拟观测值. 天津的版本,如果有数据库中有天线类型,那么会对天线类型改正了两次. 解决方法:在生成虚拟观测值编码的部分,注释掉天线改正的部分. 对结果的影响:错误版本生成的虚拟观测值,移动站 ...

  3. 【阿里八八】团队Alpha博客链接目录

    团队Alpha冲刺博客 阿里八八Alpha阶段Scrum(1/12) 阿里八八Alpha阶段Scrum(2/12) 阿里八八Alpha阶段Scrum(3/12) 阿里八八Alpha阶段Scrum(4/ ...

  4. Java学习笔记--JDK动态代理

    1.JDK动态代理     JDK1.3之后,Java提供了动态代理的技术,允许开发者在运行期创建接口的代理实例.JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和 ...

  5. iframe无刷新跨域上传文件并获得返回值

    原文:http://geeksun.iteye.com/blog/1070607 需求:从S平台上传文件到R平台,上传成功后R平台返回给S平台一个值,S平台是在一个页面弹出的浮窗里上传文件,所以不能用 ...

  6. 2018-2019-2 网络对抗技术 20165318 Exp5 MSF基础应用

    2018-2019-2 网络对抗技术 20165318 Exp5 MSF基础应用 原理与实践说明 实践原理 实践内容概述 基础问题回答 攻击实例 主动攻击的实践 ms08_067_netapi:自动化 ...

  7. Linux(CentOS)上配置 SFTP(附解决Write failed: Broken pipe Couldn't read packet: Connection reset by peer)

    #创建sftp组: groupadd sftp #创建一个用户sftpuser: useradd -g sftp -s /bin/false sftpuser #提示: /etc/group 文件包含 ...

  8. 老男孩Python全栈视频

    链接:https://pan.baidu.com/s/1c1JOCL1w-vnYGkrhElk_GQ 密码私聊我

  9. 在 Linux 上安装 Oracle 数据库 11g

    http://www.oracle.com/ocom/groups/public/@otn/documents/webcontent/229016_zhs.htm

  10. [转]VC++宏与预处理使用方法总结

    原文链接:VC 宏与预处理使用方法总结 原文链接:VC预处理指令与宏定义的妙用