社区首页 >问答首页 >维护请求之间的敏感密钥

维护请求之间的敏感密钥
EN

Security用户
提问于 2013-01-21 07:20:54
回答 3查看 404关注 0票数 0

编辑:重新加工的问题。以前的版本要求太差了。

在我的网站上,用户会写一些必须保密的敏感信息。整个用户区域都通过SSL,因此用户和服务器之间的通信应该相当安全。现在我想以一种安全的方式存储消息,这样访问数据库的攻击者就不能读取消息。

在Security.SE的帮助下,我目前正在实现这个加密方案实现审查-独立密钥、管理方和用户端

如您所见,userkey (uk)非常敏感,它是在登录时使用PBKDF2生成的(带有密码和用户盐)。我不能要求用户每次想要读取信息时输入密码,所以我想在请求之间设置英国的密码。防止攻击者获得英国的最佳方法是什么?

我想我可以在登录时生成uk (当用户输入密码时),加密并存储它。

我知道php会话不是那么安全,apc_cache_info()可能非常有害,cookie可能被窃取。所以,IV在cookie中,密钥在APC缓存中,密码在会话中:攻击者必须获得cookie,磁盘访问,RAM访问来解密英国。我说错了吗?

如果我:

  • 生成随机密钥r
  • 生成随机初始化向量IV
  • 用AES 128 CBC加密数据( PBKDF2密钥,100发),以r为密钥,IV为IV
  • 将密码文本存储在标准会话数据中。
  • 将密钥存储在APC缓存中
  • 将IV存储在cookie中
  • 获取IV,r和密码,当我需要它时,解密数据并使用它

我想知道英国现在是否保存得更安全。你能提出更好的方法吗?

非常感谢

EN

回答 3

Security用户

发布于 2013-01-21 08:09:27

对你的问题的简短回答是,不知道IV使得AES,或真正的任何分组密码在一个正确的操作模式下,更不可能蛮力,因为基本上使IV成为密钥的扩展。对于AES-256,256位密钥加上128位IV基本上要求攻击者正确猜测384位序列,需要进行最坏的2^384次尝试。从长远来看,如果一台电子级的计算机运行在100%的热效率,如果我们的太阳在剩余寿命中产生的每一个光子,在太阳变成黑矮星之前,只能尝试大约2218个键。

但是,双方都需要IV,以便在任何使用IV的模式下进行加密/解密,因此,与有关加密方案的其他细节一样,除了协商过程中各方共享的实际密钥(如算法、模式、块大小、密钥大小)外,IV也被视为公共信息。隐藏它是可能的,就像密钥可以安全地交换一样(离线,公钥密码),但这是不必要的。

在回答了这个问题后,我必须说,你还没有提供很多信息,这使得我们不可能回答更广泛的“这个方案安全吗”的问题。例如,用户的密码如何与密钥相关(您是在使用KDF还是其他“密钥拉伸”方案?)用于AES加密的操作模式是什么(有些模式比其他模式更安全,而有些模式实际上已被破坏)。编辑: CBC模式不是一个糟糕的选择(还有更糟的),但必须注意确保您的代码不能用作“填充oracle";一个”黑匣子“将告诉攻击者在解密时某个特定的密文消息是否被正确填充。它可以用于在不知道密钥的情况下从已知的密文中反向工程明文消息。由于这仅仅是一个服务器端进程,因此没有客户端代码可用于解密,因此攻击者需要深入到相当远的地方,才能将服务器代码转换为填充oracle,但绝不假设;如果您有一个好的实现可供您使用,我将选择一种经过身份验证的模式,如GCM或CCM,这将抵抗填充-oracle攻击。

我还会说,这个方案似乎只在服务器端;如果密钥和IV只存储在服务器上,那么所有的加密和解密都必须发生在服务器上,这意味着除非您使用其他东西(如SSL )向客户端发送数据,否则这一特定部分的安全性是毫无意义的。

票数 5
EN

Security用户

发布于 2013-01-21 08:07:35

是的,IV设置用于生成密码文本的流的初始状态。如果没有IV,您将得到一个不同的流,并且解密将失败。根据操作模式的不同,其失败的程度可能会有所不同。不过,我不知道你为什么会问你为什么要在没有IV的情况下破解它,听起来你在说解密。虽然需要静脉注射,但这并不是秘密。可以让IV知道,它只是通过比较使用相同密钥加密的类似消息来防止攻击。关键是要保持秘密。

如果密钥被泄露,在大多数操作模式中,都会有极大地削弱加密的攻击。虽然IV是秘密的稍微增加了安全性,但披露它并不会对加密的安全性造成灾难性的影响。然而,密钥的保密是至关重要的,因为如果密钥已知,则IV的保密很可能无法保护消息。

票数 3
EN

Security用户

发布于 2013-01-21 09:29:57

大多数关于会话劫持之类的担忧是有效的,但不会立即危及服务器上的数据。我的建议是在用户密钥最初使用另一个时间会话密钥获得后对其进行加密,将密钥分成三个部分(或用3个不同的会话密钥对其进行加密),然后将IV (或适当的IV)的一部分和密钥的一部分(或3个密钥中的一个)作为令牌。然后,当提供所有三条信息时,可以对实际密钥进行解密,但任何已泄露的密钥都不会在会话之外受益,真正的解密密钥只有在提供了会话密钥的3段作为密码的替代后才能用于服务器。

使用三个单独的会话密钥将提供更多的安全性,但也需要更多的处理能力。一个简单的拆分仍然会提供一些额外的保护,这取决于密码的操作方式,而且成本更低。

最重要的是,您永远不希望向攻击者(或客户端)公开实际的解密密钥或有关数据解密密钥的任何信息,并且不希望它在DB (处于静止状态)中不受保护。这意味着您需要以一种受只有客户端知道的信息保护的方式来存储数据密钥,并将信息分成三部分来折衷,稍微增加了难度。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/29432

复制
相关文章
kafka 中 zookeeper 具体是做什么的?
zookeeper 是 kafka 不可分割的一部分,可见其重要程度,所以我们有必要了解一下 zookeeper 在 kafka 中的具体工作内容。
dys
2019/12/15
1.7K0
做SaaS,实际上就是旧城改造
来源:ToB老人家|作者:王戴明  ---- SaaS的4条护城河 周末到一家非常优秀的SaaS公司交流。他们深耕某垂直领域,刚完成一笔数亿元的融资。 公司创始人给我说:他正在评估一个新的垂直领域。但让他纠结的是,这个领域已经有多家SaaS公司竞争,其中还有一家上市公司。对他来说,如果不能做到垂直领域的第一,那么还不如不做。 他的观点我颇为赞同。其实,对创业者来说,竞争并不可怕,上市公司也不足为惧,真正可怕的是:创业者没有想明白自己的护城河在哪里。一家没有护城河的SaaS公司,不要说应
腾讯SaaS加速器
2021/06/08
4160
在Hadoop中Container是干什么的?
Container:马 克-to-win @ 马克java社区:前面我们总提资源分配。而资源分配的体现就要用到一个抽象概念“容器”(Container)表示,Container将内存、 CPU、磁盘、网络等资源封装在一起,这样可以起到限定资源边界的作用。比如给你一个Container的资源,里面包含3个G的内存,1G硬盘。当销毁 你的Container时,连带的内存,硬盘都没有了。
马克java社区
2021/06/24
7690
在Hadoop中ResourceManager是干什么的?
ResourceManager:马克-to-win @ 马克java社区:防盗版实名手机尾号:73203。当应用程序对集群资源需求时,ResourceManager是Yarn集群主控节点,负责协调和管理整个集群(所有NodeManager)的资源。
马克java社区
2021/06/24
8710
在Hadoop中NodeManager是干什么的?
NodeManager:马克-to-win @ 马克java社区:NodeManager管理一个YARN集群中的每一个节点。比如监视资源使用情况( CPU,内存,硬盘,网络),跟踪节点健康等。
马克java社区
2021/06/24
8250
在Hadoop中ApplicationMaster是干什么的?
ApplicationMaster:马 克-to-win @ 马克java社区:想了解ApplicationMaster,我们需要了解一下它工作的过程。 用户向YARN集群提交应用程序时:(包含ApplicationMaster程序,ApplicationMaster启动命令,用户自己的程序)后, ApplicationMaster向资源调度器申请执行任务的资源容器Container,运行用户自己的程序任务job(我们可以用浏览器看yarn 里的job进展),监控整个任务的执行,跟踪整个任务的状态,处理任务失败以异常情况。
马克java社区
2021/06/24
1K0
链路层是做什么的?
最大传输单元。链路层[以太网(1500字节)和802.3(1492字节)]对数据帧的长度存在限制。
爬蜥
2019/07/09
1.3K0
java中trim()方法是用来干什么的?
trim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然中间的那些空格不会被去掉,如:
瑞新
2020/07/07
1.3K0
docker是啥?是干什么的?
docker有3大核心:镜像、容器、仓库。 鲸鱼是操作系统。 要交付的应用程序是各种货物,要将各种形状和尺寸不同的货物放到大鲸鱼上,得考虑每件货物怎么安放(应用程序配套的环境),还得考虑货物和货物之间能否重叠起来(应用程序依赖的环境是否会冲突)。 现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。 即:打包放到鲸鱼上,鲸鱼放到服务器上。也就是“build——ship——run”,这样在自己的电脑上怎么运行,在服务器上也会怎么运行。 用docker运行一个程序的过程: 去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器。
兔子吖
2019/10/14
1.5K0
docker是啥?是干什么的?
大数据开发是干什么的(大数据开发是做什么的)
据数联寻英发布《大数据人才报告》显示,目前全国的大数据人才仅46万,未来3-5年内大数据人才的缺口将高达150万,越来越多人加入到大数据培训,都希望在大数据培训机构中学习最前沿的知识,找一份不错的工作。
全栈程序员站长
2022/07/31
1.3K0
都知道这么做是对的,但是能说为什么的没多少 ...
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。
宫水三叶的刷题日记
2021/02/26
3.3K0
C#9.0:Init
在以前的C#版本里面,如果需要定义一个不可修改的的类型的做法一般是:声明为readonly,并设置为只包含get访问器,不包含set访问器。如下:
用户9127601
2021/11/01
3470
c语言目标程序中的段
段的分类 根据C语言的特点,每一个源程序生成的目标代码将包含源程序所需要表达的所有信息和功能。目标代码中各段生成情况如下:
用户4766018
2022/08/19
1.4K0
Actor模型是做什么的?
问题 用户A的操作 (1)开始事务 (2)操作资源1 (3)操作资源2 (4)提交事务 用户B的操作 (1)开始事务 (2)操作资源2 (3)操作资源1 (4)提交事务 如果用户A和用户B的两个事务同时发生,A锁住了资源1,B锁住了资源2,互相等待,陷入死锁 如果采用同步锁synchronized,可能会出现破坏逻辑一致性的问题 这个问题的根本原因:数据是被动的被处理 在读多写少,较少涉及事务机制的场景下,这个问题不明显,否则就面临此问题 Actor模型 Actor模型就是用来解决事务
dys
2018/04/03
1.3K0
serialVersionUID 是干什么的?
我们有时候在写代码的时候,对于一个需要序列化的类,如果不去写 serialVersionUID,编译器可能就会提示我们 The serializable class ClassName does not declare a static final serialVersionUID field of type long。
做棵大树
2022/09/27
1.3K0
Docker是用来干什么的?
Docker目前只能在Linux下运行 下面的例子我自己经常使用,当然你有更好的案例也可以分享给我。
爱吃大橘
2022/12/27
1.2K0
csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
当我们在传统格式的 csproj 项目文件中安装 NuGet 包后,有时会在项目文件中发现空的 NuGetPackageImportStamp 节点。这个空的节点让我们这波强迫症患者觉得有点难以接受,关键是手工删除之后也没发现有什么副作用。
walterlv
2023/10/22
2890
csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
数据产品经理是做什么的?
作为一名 B 端产品经理,一直致力于研究企业内部效率工具的实施与搭建,热衷于使用以数据指标为引擎的各类增长方法。应该说,平时我的工作方法与数据产品经理非常接近,今天看到这道题,忍不住顺手答一下,很多想法不太成熟,还请数据大佬们轻拍。
蒋川
2021/08/10
1.3K0
数据产品经理是做什么的?
点击加载更多

相似问题

如何动态导入带有超时的不安全Python模块?

10

Python扭曲的ImportError:无法导入名称unicode

14

python确定导入模块的名称

32

Python:导入带有参数的模块?

215

带有iis导入模块的Python

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档