gpt4 book ai didi

python - python中的恒定时间 `if-else`

转载 作者:太空狗 更新时间:2023-10-29 20:56:10 25 4
gpt4 key购买 nike

我想知道是否有一种简单的方法(也许是一个库)可以用 Python 编写常量时间程序。特别是,我希望能够指定 if-else 流必须始终在 if 条件为 TrueFalse 的同一时间持续。

例如:

if condition:
foo1()
else:
foo2()
foo3()

constant-time 的想法是,在执行中,直到它命中 f3() 所花费的时间应该与 condition< 的评估结果无关地花费相同的时间。这将防止时间泄漏作为泄露其他信息的旁路(参见 timing attacks)。

最佳答案

由于您的问题是关于安全性的,我假设我们可以撇开性能并非常天真地引入最少的时间来花在所有可能的分支上。实现此目的的一种方法是使用 context managers :
你的问题可以写成:

with ConstantTime(0.1):
if condition:
foo1()
else:
foor2()
foo3()

使用这样定义的上下文管理器:

import threading
import time

class ConstantTime():
def __init__(self, length):
self.length = length

def __enter__(self):
self.timer = threading.Thread(target=time.sleep, args=[self.length])
self.timer.start()

def __exit__(self, exc_type, exc_value, traceback):
self.timer.join()

当然,您必须根据您正在做的事情将实际时间调整为实际值。

一般来说,您不能确定所选分支不会超过​​您的最短时间,因为 Python 是一种非常高级的语言,您可能不会在实时操作系统中运行它,但是如果您设法覆盖平均运行时间,您应该显着减少从时序分析中收集的信息。

关于python - python中的恒定时间 `if-else`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25218397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com