在上次实验(具体过程,请点击)的基础上,将攻击点改成Sbox的输入做CPA攻击。记录并思考解释其攻击结果

实验源码

#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);}//密钥从0-63Key++;}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) % 8 == 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();cout << "\nKey20和Key43:HW20和HW43值:\n";for (int i = 0; i < 20; i++) {cout << HWw[20][i] << " ";}cout << "\n";for (int i = 0; i < 20; i++) {cout << HWw[43][i] << " ";}cout << "\nKey20和Key43:P20和P43值:\n";for (int i = 0; i < 20; i++) {cout << Ptest[20][i] << " ";}cout << "\n";for (int i = 0; i < 20; i++) {cout << Ptest[43][i] << " ";}cout << "\nKey20和Key43:异或后输入的值:\n";for (int i = 0; i < 20; i++) {cout << Sout[20][i] << " ";}cout << "\n";for (int i = 0; i < 20; i++) {cout << Sout[43][i] << " ";}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) % 8 == 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;Sout[Nkey][i] = num;HWw[Nkey][i] = HWFun(num);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 num;
}int HWFun(int num) {int count = 0;int bit;for (int i = 5; 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;
}


分析

Key20和Key43:异或后输入的值:
61 55 42 16 53 56 2 58 6 4 29 37 37 47 61 63 39 50 15 40
2 8 21 47 10 7 61 5 57 59 34 26 26 16 2 0 24 13 48 23
Key20和Key43:
HW20和HW43值:
HW20:5 5 3 1 4 3 1 4 2 1 4 3 3 5 5 6 4 3 4 2
HW43:1 1 3 5 2 3 5 2 4 5 2 3 3 1 1 0 2 3 2 4
和: 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
可以看出两者对应位的HW和为6,即密钥key的位数。

20二进制:010100
43二进制:101011
20+43=63,所以二者在6bit中互为补码。
HW20=6-HW43 HW20与HW43线性相关
P=HW*5;
P20=6-P43/5 P20与P43线性相关
所以R20=R43=1;

调整控制台输出,观察CPA攻击系数:

相关系数的值和对称位置相等。

观察DPA攻击差分值:

结论

一个数和它的补码具有线性相关性,经过一些同样(平行)的操作后,有关的相关性是一致的。

DES入盒前的CPA攻击相关推荐

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

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

  2. 入院前、入产房前、分娩前物品准备

    医院待产包及产后囤货包孕期囤货清单 孕期囤货指南 入院前.入产房前.分娩前物品准备温馨提示 一 入院资料 1.女方户口,男方户口的,请携带结婚证: 2.母子保健手册: 3.所有检查单(包括外院检查单) ...

  3. IT面试:三十六计(10)入职前准备

    高薪之15条件,一条7000元 1-985/211毕业,硕士优先 2-海外名校,硕士优先 3-10年以上的工作经验,有海外工作经验优先 4- 英文读写说流利 5 -曾有过乙方工作经验(如四大),顾问工 ...

  4. 入职前的背景调查是查什么?求职者应该怎么应对?

    很多小伙伴在求职的时候都把精力放在工作调研,简历修改.面试环节和薪酬谈判上,忽略了背景调查这一环节,导致最后面试都通过了,准备发offer了,却倒在了背景调查上.入职前的背景调查是查什么?求职者应该怎 ...

  5. 【奇闻】广东百岁老妇入棺前“复生” 已办16小时丧事

    两个女儿在给彭阿婆喂粥.通讯员供图 南都讯 1月19日,湛江廉江市101岁高龄老人彭秀华突然"死亡",家人见其闭目僵硬.没有呼吸.没有心跳,开始料理后事,结果次日下午3时,在&qu ...

  6. 前端小白入职前的准备

    每到入职前的一天,心里都有点的小慌,担心明天入职时该怎么做? 其实不必慌张,首先将该带的证件准备齐全如:身份证,离职证明 ,入职体检 ,学历证书 ,银行卡 ,具体要求看公司 其次将需要的环境之类的安装 ...

  7. 重要‼️入职前要问的问题,详细实用!应届生一定要看

    重要‼️入职前要问的问题,详细实用 ⚠️不论你是换工作还是初入职场的应届生新人,收到offer别着急答应,还有很多入职之前的注意事项,一定要和HR确认清楚❗️这9个问题,帮你提前避免入坑. 1.薪资结 ...

  8. 程序员都有一张早衰的脸?但入职前,谁还不是个吴彦祖呢?

    28 岁的程序员可以提前拥有 82 岁老人的容颜. 在互联网企业,你可以很容易凭借外貌看出一个程序员到底有几年经验. 第一年,刚入行的程序员穿着干净的白T+牛仔裤,意气风发,眼神里带着清澈的愚蠢. 第 ...

  9. RPG游戏制作-04-接入脚本前的准备

    在RPG的开发中,一般情况下都会使用脚本,脚本在游戏开发中也很重要,在RPG游戏中,脚本就像剧本,来控制整个RPG游戏的流程. 本游戏使用lua脚本语言,版本为5.3,没使用额外的库,这点和cocos ...

  10. Crazy Defense Heroes 如何冲入 GameFi 前 4?

    April 2022, Simon Data Source: Footprint Analytics Crazy Defense Heroes Dashboard 手游中塔防游戏再常见不过,但 Gam ...

最新文章

  1. 隐私保护新突破:高斯差分隐私框架与深度学习结合
  2. 如何解决XML文件中的警告提示“No grammar constraints (DTD or XML Schema) referenced in the document.”...
  3. linux shell 循环语句 for while until
  4. 3.网络通信协议分类
  5. 运维质变育新机,华为云能否引领政企运维破局?
  6. linux下安装配置oracle
  7. Java8新特性总结 -6.Date/Time API
  8. 数据库入门-基本sql语句及数据类型
  9. Linux cannot remove 'XXX': Is a directory 解决办法
  10. 阿里云云安全中心入选 Gartner CWPP 全球市场指南 | 凌云时刻
  11. 服务器上添加信任网站,如何将网站添加到信任站点
  12. JVM-GC日志分析
  13. 蓝桥杯青少年创意编程C++组赛前集训教程包
  14. 简易命令行界面的C/S聊天室
  15. sql中按照指定字段排序失效
  16. 在Linux上建立ssh隧道
  17. 【BZOJ 3083】遥远的国度 树剖
  18. 淘宝退货退款测试用例
  19. 使用百度云的图像识别
  20. 中小企业如何选择仓库管理软件?看这一篇就够了

热门文章

  1. java verbose gc_java –verbose:gc
  2. 人生,关了一扇窗,又开启另一扇门
  3. LeetCode-Python-274. H指数
  4. iBeacon距离测量误差有多大
  5. 外媒点赞,浪潮存储为何能入围全球最佳主存储供应商
  6. python数列_Python斐波拉契数列
  7. 双11临近,电脑无缘无故的弹出了双11天猫广告,必须追踪到底
  8. 用python爬取拉勾网招聘信息并以CSV文件存储
  9. 企业微信企业邮箱设置,微信企业邮箱如何设置?
  10. 剑指Offer对答如流系列 - 把数字翻译成字符串