首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于防御定时侧通道攻击的Python库或技术

用于防御定时侧通道攻击的Python库或技术
EN

Stack Overflow用户
提问于 2018-04-16 05:46:33
回答 1查看 302关注 0票数 0

考虑一个获取用户名和密码的登录API入口点。

密码是安全的散列和咸化,按照正确的做法,如果用户名不存在或密码不正确,我们将返回相同的响应。

代码语言:javascript
复制
def verify_user(session, username, password):
    user = session.query(Users.username == 'username').one()
    stored_hash = user.password_hash if user is not None else 'some-dommy-hash'
    return verify_password(password=password, hash=stored_hash)

请注意,我们还试图确保两个控制流所做的工作量都是相同的,因此它们所花费的时间应该是相同的。

但是关于和应该是我担心的原因。

假设在数据库中查找和不找到用户所花费的时间是相同的安全吗?我是否可以假设哈希相同的虚拟散列不会被缓存?

我真正想要的是这样的一种方式:

代码语言:javascript
复制
def constant_time_verify_user(time, session, username, password):
    with constant_time(time):
        ans = verify_user(session, username, password)
    return ans

constant_time中,类似于超时,因为它需要一定的时间。

因此,我的问题是:是否有一个完善的实践,或一个库,它将帮助模糊操作可能需要的时间,以抵御基于时间的攻击

编辑:@Stawanswer表示,原因不明,实际上,我正在努力防止数据库中存在用户的信息泄露。

EN

回答 1

Stack Overflow用户

发布于 2018-04-16 06:13:46

我明白你真正担心的是什么。您不希望其他人知道用户是否存在。

在单线程结构下,实现起来似乎不容易。但是,如果您可以接受使用多个线程,这是可能的。

您可以将函数封装到线程中,并为其设置合理的超时。如果线程在超时之前返回,那么多睡一会儿。

因为我通常构建异步web服务器,这对我来说实现起来要容易一些。

代码语言:javascript
复制
async def constant_time_verify_user(time, session, username, password):
    start_time = _time.time()
    try:
        ans = await asyncio.wait_for(verify_user(session, username, password), timeout=time)
        await asyncio.sleep(time + start_time - _time.time())
        return ans
    except (asyncio.TimeoutError, asyncio.CancelledError):
        return "Exceed maximum execute time!"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49850326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档