密码侧信道分析实验-计时工攻击

密码侧信道分析实验-计时工攻击

备注:密码侧信道分析课程的课内实验,仅供学习参考。不一定正确。

【实验目的】
1、掌握计时攻击的基本原理;
2、掌握计时攻击方法进行密钥猜测攻击的基本原理和方法;
3、掌握字符串验证过程中计时攻击的基本原理和方法。

【实验人数】
每组1人
【系统环境】
Windows
【编程语言】
Python
【实验原理】
计时攻击是侧信道攻击( Side Channel Attack, 简称SCA) 的一种。攻击者试图通过分析加密算法的时间执行来推导出密码。每一个逻辑运算在计算机需要时间来执行,根据输入不同,精确测量执行时间,根据执行时间反推出密码。
一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,如果该函数是从第一位开始比较,发现不同就立即返回,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。密码破解复杂度成千上万倍甚至百万千万倍的下降。最简单的计时攻击防御方法是:“发现错误的时候并不立即返回,而是设一个标志位,直到完全比较完两个字符串再返回”。
下面两种不同的字符串比较方式:
1.正常的字符串比较方法。一旦遇到一个不同的字符就返回失败了,所以,理论上来说,只有前面2个字符相同字符串的比较时间,要比前面有10个字符相同的比较时间要长。你会说,这能相差多少呢?可能几微秒吧。但是,我们可以放大这个事。比如,在Web应用时,记录每个请求的返回所需赶时间(一般是毫秒级),如果我们重复50次,我们可以查看平均时间或是总时间,以了解哪个字符返回的时间比较长,如果某个我们要尝试的字符串的时间比较长,我们就可以确定地得出这个这字符串的前面一段必然是正确的。
2.改进的字符串比较方法。通过异或操作 1^1=0 , 1^0=1 , 0^1=1 ,0^0=0,来比较每一位,如果每一位都相等的话,两个字符串肯定相等,最后存储累计异或值的变量 必定为 0,否则为 1。
【实验内容】
1、完成detime-student.py程序中正常字符串比较方法different_time_compare(val1, val2)函数与改进的字符串比较方法constant_time_compare(val1, val2)函数,比较两个函数在比较相同字符串与不同字符串之间的用时差别,并分析原因。
(1)补充different_time_compare函数与constant_time_compare函数

(2)different_time_compare函数比较相同字符串
(3)different_time_compare函数比较不相同字符串
(4)constant_time_compare函数比较相同字符串
(5)constant_time_compare函数比较不相同字符串

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 17 15:21:17 2021

@author: lilin
"""

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 17 11:01:37 2021

@author: lilin
"""
import random
import time

#字符串长度
length = 8000000 #值太小会出现计时偏差错误


def different_time_compare(val1, val2):
    """
    存在计时攻击的字符串比较方法
    """
    t1 = time.time()
    if len(val1) != len(val2):
        return False
    #补充:用正常的字符串比较方法比较
    for i in range(len(val1)):
        if val1[i] != val2[i]:
            t2 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值