CPA和DPA

CPA(Connectional Power Analysis):相关性能量攻击,主要通过分析相关性来猜测密钥。
DPA(Differential Power Analysis):差分能量攻击,主要通过计算差值,比骄傲大小来分析猜测密钥的合理性。

完成的内容

攻击对象:
其中sbox是des中的6入4出的s盒子,C和K是6bit数,Sout是4bit的数。
要求:已知C的值和Sout(c,k)对应的信号值,攻击K。

测量仿真阶段:

输入20个随机明文C(C1至C20),固定密钥Ktrue,产生20个仿真信号P。

假设计算阶段

遍历所有可能的k(从000000到111111,共64个),求输入对应中间值Sout的汉明重量HW
数据二:

CPA攻击

数据二中每一列对应某一个猜测密钥K,用数据二的每一列HW分别与数据一中最后一列P计算相关系数ρ,并将其记录至数据三的ρ0至ρ63;再求这64个值中最大值ρi=Max(ρ),则i即为正确密钥Ktrue。
最大相关:R43=0.835214
正确密钥:101011

DPA攻击

1、在数据二中,首先观察第一列k=0对应的hw重量,将其对应能量值p根据hw的大小(以2为分界)分成两大类,下面给一个例子:比如在k=0时,计算出20个对应的汉明重量,将对应信号p与其同列,再根据汉明重量大小分类,然后将同一类中的所有信号值做平均,分别求出p0和p1,再求差分Δ(k=0)=|p1-p0|。
2、针对k=1/2/…/63,重复1、的过程,分别求出Δ(k=1)、Δ(k=2)…、Δ(k=63)。
3、比较这64个差分值的大小,求出最大值Δ(k=j)=max(Δ),此时对应j即为真实密钥Ttrue。
最大差分值:Deta43=9.04762
正确密钥:101011

源代码

#include <iostream>
#include<math.h>
#include<iomanip>
using namespace std;int HWFun(int num);
int Sboxout(int num, int Nkey,int i);
double Corr(int n, int Pstd[], int Ptest[]);
double meanNum(int n, int num[]);
void Dpa();int S_Box1[4][16] = {                     //8个S盒   三维数组// S114, 4,  13, 1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7,0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8,4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0,15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13 };int mingwen[20] = { 41,35,62,4,33,44,22,46,18,16,9,49,49,59,41,43,51,38,27,60 };int HWw[64][20];
int Ptest[64][20];
int Pstd[20];
int HWstd[20];//DPA
double DpaP[64][2];
//记录上述差值
double Deta[64];
int DpaMax;int Sout[64][20];
double Rl[64];
//相关系数最大位置
int Max;int main()
{//int Key = 0b00101011;int Key = 0;cout << "序号    明文  二进制明文   Sout    HW  P\n";for (int Nkey = 0; Nkey < 64; Nkey++) {for (int i = 0; i < 20; i++) {Sboxout(mingwen[i] ^ Key, Nkey,i);}Key++;}cout << "HW:key0-19\n";for (int i = 0; i < 20; i++) {for (int j = 0; j < 20; j++) {cout << HWw[i][j] << "   ";}cout << "\n";}cout << "HW:key20-39\n";for (int i = 0; i < 20; i++) {for (int j = 20; j < 40; j++) {cout << HWw[j][i] << "   ";}cout << "\n";}cout << "HW:key40-63\n";for (int i = 0; i < 20; i++) {for (int j = 40; j < 60; j++) {cout << HWw[j][i] << "   ";}cout << "\n";}cout << "HW:key60-63\n";for (int i = 0; i < 20; i++) {for (int j = 60; j < 64; j++) {cout << HWw[j][i] << "   ";}cout << "\n";}cout << "相关系数:R0-63:\n";double temp=0.0;for (int i = 0; i < 64; i++) {Rl[i]=abs( Corr(10, Pstd, HWw[i]));if (Rl[i] > temp) {Max = i;temp = Rl[i];}cout << setw(10) << Rl[i] << "  ";if ((i+1) % 6 == 0)cout << "\n";}cout << "\nCPA攻击:\n";cout << "最大相关:R" << Max << "=" << Rl[Max];cout << "\n正确密钥:";int bit[6];int temp1 = Max;for (int j =5; j >= 0; j--) {bit[j] = temp1 % 2;temp1 = temp1 / 2;}for (int j = 0; j < 6; j++) {cout << bit[j];}Dpa();return 0;
}void Dpa() {//以2为界int Larr[20];int Harr[20];int Lc = 0;int Hc = 0;for (int i = 0; i < 20; i++) {if (HWstd[i] < 2) {Larr[Lc] = i;Lc++;}else {Harr[Hc] = i;Hc++;}}for (int i = 0; i < 64; i++) {int Htemp = 0;int Ltemp = 0;//HW小于2,对应累加for (int j= 0; j < Lc; j++) {Ltemp += Ptest[i][Larr[j]];}//HW大于2,对应累加for (int j = 0; j < Hc; j++) {Htemp += Ptest[i][Harr[j]];}DpaP[i][0] = Ltemp*1.0/Lc;DpaP[i][1] = Htemp*1.0/Hc;Deta[i] = abs(DpaP[i][0] - DpaP[i][1]);}cout << "\nDPA攻击\n差分值:Deta0-63:\n";for (int i = 0; i < 64; i++) {cout <<setw(10)<< Deta[i] << " ";if ((i + 1) % 6 == 0) {cout << "\n";}}double temp = 0.0;for (int i = 0; i < 64; i++) {if (Deta[i] > temp) {DpaMax= i;temp = Deta[i];}}cout << "\n最大差分值:Deta"<<DpaMax<<"="<< Deta[DpaMax];cout << "\n正确密钥:";int bit[6];int temp1 =DpaMax;for (int j = 5; j >= 0; j--) {bit[j] = temp1 % 2;temp1 = temp1 / 2;}for (int j = 0; j < 6; j++) {cout << bit[j];}}int Sboxout(int num, int Nkey,int i) {int HW = 0;int P = 0;int h = num & (0b00100000);h = h >> 4;int l = num & (0b00000001);int m1 = num & (0b00000010);m1 = m1 >> 1;int m2 = num & (0b00000100);m2 = m2 >> 1;int m3 = num & (0b00001000);m3 = m3 >> 1;int m4 = num & (0b00010000);m4 = m4 >> 1;int y = l + h;int x = m1 + m2 + m3 + m4;//int bit[4];int Snum = S_Box1[y][x];Sout[Nkey][i] = Snum;HWw[Nkey][i] = HWFun(Snum);Ptest[Nkey][i] = HWw[Nkey][i] * 5;//cout << "  " << HWw[Nkey][i];P = HWw[Nkey][i] * 5;if (Nkey == 43) {Pstd[i] = P;HWstd[i] = HWw[Nkey][i];}return Snum;
}int HWFun(int num) {int count = 0;int bit;for (int i = 3; i >= 0; i--) {bit = num % 2;if (bit == 1)count++;num = num / 2;};return count;
}double meanNum(int n, int num[]) {double total=0.0;for (int i = 0; i < n; i++) {total = total + num[i];}return total / n;
}double Corr(int n, int Pstd[], int Ptest[]) {//int E_Pstd;double fenzi=0.0;double PstdMean = meanNum(n, Pstd);double PtestdMean = meanNum(n, Ptest);double fenmu1 = 0.0;double fenmu2 = 0.0;double corr = 0.0;for (int i = 0; i < n; i++) {fenzi += (Pstd[i] - PstdMean) * (Ptest[i] - PtestdMean);fenmu2 += (Ptest[i] - PtestdMean)* (Ptest[i] - PtestdMean);fenmu1 += (Pstd[i] - PstdMean) * (Pstd[i] - PstdMean);}corr = fenzi / (sqrt(fenmu1) * sqrt(fenmu2));return corr;
}

结束

主要梳理了做过的有关DPA和CPA攻击的一个简单实例,真正的硬件安全检测和测信道攻击要复杂的多,安全世界无奇不有,上硬件安全设计与检测这门课,开拓了安全领域的研究视野。道路漫长,慢慢走。

DES的s盒输出CPA和DPA攻击相关推荐

  1. des算法s盒java实现_DES算法详解

    本文主要介绍了DES算法的步骤,包括IP置换.密钥置换.E扩展置换.S盒代替.P盒置换和末置换. 1.DES算法简介 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准. DES是一个分组 ...

  2. 对于DES的S盒 计算随机变量的偏差

    题目 对于DES的S1,计算下列随机变量的偏差 X 2 ⨁ Y 1 ⨁ Y 2 ⨁ Y 3 ⨁ Y 4 {X_2}\bigoplus{Y_1}\bigoplus{Y_2}\bigoplus{Y_3}\ ...

  3. DES算法实现S盒替换

    一.实验目的: 理解DES算法并掌握S盒替换原理,用代码实现S盒替换. 二.实验过程: 1.学习DES算法的三个步骤中的第二步:16轮的迭代运算. 2.学习S盒替换 :首先输入一个六位二进制数,把这个 ...

  4. 《信息安全工程师教程》学习笔记02(第二章 密码学基础与应用—DES算法)

    第二章 密码学基础与应用 2.1 密码学的基本概念 1949年香农发表了<保密系统的通信理论> 1976年W.Diffie和M.Hellman提出公开密钥密码 1977年美国联邦政府颁布数 ...

  5. 基于无保护AES芯片的 CPA攻击

    基于无保护AES芯片的 CPA攻击 王立敏 1,丁洁 2 1中国科学院信息工程研究所 第五实验室 北京 中国 100093 2 中国科学院信息工程研究所 第五实验室 北京 中国 100093 摘要 高 ...

  6. DPA——差分能量分析(Differential Power Analysis)

    1 能量分析技术 1.1 能量分析概述 密码设备在进行加解密运算时,其内部结点电平高低变换完成运算,电平变换过程中电容不断地充放电进而从电源源源不断的获取电流.由于内部电阻的存在,此时设备不断地产生能 ...

  7. 算法科普:神秘的 DES 加密算法

    1 前言 DES 算法是一种常见的分组加密算法,由IBM公司在1971年提出.DES 算法是分组加密算法的典型代表,同时也是应用最为广泛的对称加密算法.本文将详细讲述DES 的原理以及实现过程. 1. ...

  8. CPA相关功耗分析(二)

    CPA实例1 攻击异或运算,攻击的比特数为3,即攻击的中间数据data=K⊕M, K和M的二进制比特数为3.(此处的加密方式为C=K⊕M) 下发的明文和采集到的能量数据如下表所示,密钥K=? 明文M ...

  9. DES算法的matlab实现

    主函数 keyword = 'AABBCCDD'; % 密码,8位ascii码 text = 'woleilee'; % 明文8位ascii码 bin_text = convert_mess2bin( ...

  10. 密码学 实现 DES 的工作模式 电码本模式ECB 密码分组链接模式CBC java 实现

    实现 DES 的工作模式 一. 实验目的 掌握 DES 算法的工作原理: 熟悉分组加密算法的工作模式. 二. 实验原理 DES 的基本原理 ppop 其入口参数有三个:key.data.mode. K ...

最新文章

  1. linux 防火墙 命令
  2. 计算机统考408卷子谁批,【计算机统考】你对计算机统考408了解有多少?
  3. Java同步工具类——信号量
  4. 函数调用时栈的相关变化
  5. 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了...
  6. php的一些不安全函数,php中可能会产生安全问题一些函数
  7. android 动态换肤框架,GitHub - ss520k/Android-Skin-Loader: 一个通过动态加载本地皮肤包进行换肤的皮肤框架...
  8. Import declarations are not supported by current JavaScript version
  9. 10. SQL 注入
  10. mysql2000数据库四合一_sql2000四合一版下载|microsoft sql server2000 简体中文4合一版附sql 2000 sp4 补丁_ - 极光下载站...
  11. 英雄联盟一直连接服务器win10,win10上玩英雄联盟无法连接服务器是怎么回事
  12. 手游封包辅助开发教程
  13. cocosCreator关闭多点触摸的问题
  14. Jetpack Compose的Modifier顺序问题
  15. P1164 小A点菜(DP动态规划,洛谷,java)
  16. 康拓普:大屏、VR、网页…..数据可视化有哪些应用场景?
  17. bzoj1905: Soldier 士兵控制的棋盘
  18. 模型评价(AUC,ROC曲线,ACC, 敏感性, 特异性,精确度,召回率,PPV, NPV, F1)
  19. 国外搜索引擎+视频网站
  20. c语言中编译解释,C语言既可以编译执行又可以解释执行吗? 编译执行怎么解释? 解释执行又怎么解释?...

热门文章

  1. Web前端人员如何提升能力 提高效率有哪些方法
  2. mysql干嘛的_mysql和sql是干什么的?
  3. Copy On Write机制了解一下
  4. package 包名; ^ zip END header not found
  5. 【视频检测】Flow-Guided Feature Aggregation for Video Object Detection
  6. 京东双11准点秒杀脚本
  7. git和github使用
  8. aruba交换机配置命令_Aruba 无线交换机基本操作命令
  9. CVPR2020 Rotate-and-Render: Unsupervised Photorealistic Face Rotation from Single-View Images论文笔记
  10. permissionerror winerror 5 拒绝访问。