原作者论文请参考《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. JMeter—监听器(十二)

    参考<全栈性能测试修炼宝典JMeter实战>第六章 JMeter 元件详解中第七节监听器用来显示JMeter取样器的测试结果,能够以树.表.图形形式显示,也可以以文件方式保存. 一.设置默 ...

  2. c#权限验证

    在开发过程中,需要对访问者的身份做权限验证(再filter中进行权限过滤). 在每次进入控制器方法之前进行调用:如 [ControllerAuth] [RoutePrefix("Clinic ...

  3. Sql Server 判断字符串是否可以转数字

    主要是在sql server的内置系统函数ISNUMERIC的基础上,将例外的“+”.“-”.“$”等也进行判断. CREATE FUNCTION [dbo].[fn_IsNumberic]( @st ...

  4. Fedora 29 使用 SCL (Software Collections)

    在社区中SCL 由Centos 项目进行维护,所以我们使用CentOS 7 SCL源.CentOS SCL中提供了devtoolset-7-gcc-c++,版本正好为 gcc version 7.3. ...

  5. MongoDB的安装与python操作MongoDB

    一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...

  6. Docker容器学习与分享12

    Docker多主机管理 之前在一台Centos7上安装了Docker,如果是在多台主机上都安装Docker,用手动安装的方法不光效率低下,而且有可能出错,所以可以使用Docker Machine进行多 ...

  7. February 3rd, 2018 Week 5th Saturday

    Life takes on the meaning that you give it. 你赋予生活什么,生活就是什么样子. I always wonder why on earth I am here ...

  8. Spring boot + mybatis + orcale

    接着上次的实现, 添加 mybatis 查询 orcale 数据库 第一步: 新建几个必须的包, 结果如下 第二步: 在service包下新建personService.java 根据名字查perso ...

  9. 【Beta Scrum】冲刺! 3/5

    1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 完成登录注册api,协助web端完成api N SDN课程实践加上课缘故,仅仅写完了登录注册的逻辑判断内容,但是短 ...

  10. 17秋 软件工程 第六次作业 Beta冲刺 Scrum1

    17秋 软件工程 第六次作业 Beta冲刺 Scrum1 各个成员冲刺期间完成的任务 重新梳理项目架构与当前进展,并且对我们的Alpha版本项目进行完整测试,将测试过程中发现的问题列入Github i ...