将加密的密码密钥存储在另一个表中是一个好主意吗?

猎鹰C

我正在一个项目中,我有一些有价值的信息,这些信息必须存储在表“ members”中。表结构将如下所示:

id | username | password | salt | last_name 
———|——————————|——————————|——————|———————————
 1 | VARCHAR  |   HASH   | CHAR |    BLOB   
 2 | VARCHAR  |   HASH   | CHAR |    BLOB   
 3 | VARCHAR  |   HASH   | CHAR |    BLOB   
 4 | VARCHAR  |   HASH   | CHAR |    BLOB   
 5 | VARCHAR  |   HASH   | CHAR |    BLOB   

在此示例中,last_name使用密钥加密。该密钥存储在表“ keys”中:

id | key  
———|—————— 
 1 | BLOB 
 2 | BLOB 
 3 | BLOB 
 4 | BLOB 
 5 | BLOB 

这些密钥还使用另一个密钥加密,该另一个密钥是从未加密的密码,ID和用户名派生的。

我以为这很省钱,因为如果数据库被盗,小偷将无法派生表'keys'中的键,最终也无法派生出解密的密钥last_name

我想确定这是否真的保存,或者是否还有另一种方式来存储密钥。

yon

这称为密钥包装,是的,它是安全的,但是在加密密钥时,应使用专门为此设计的密码。这个问题对原因有一个很好的解释。

不确定您使用的是哪种语言,但是在Java中,您会像这样进行操作:

Key rootKey = new SecretKeySpec(keyBytes, "AES");
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(128);
Key keyToWrap = generator.generateKey();

Cipher cipher = Cipher.getInstance("AESWRAP");
cipher.init(Cipher.WRAP_MODE, rootKey);
byte[] wrappedKey = cipher.wrap(keyToWrap);

Cipher uncipher = Cipher.getInstance("AESWRAP");
uncipher.init(Cipher.UNWRAP_MODE, rootKey);
Key unwrappedKey = uncipher.unwrap(wrappedKey, "AES", Cipher.SECRET_KEY);

另外,请确保使用良好的密钥派生功能(例如SCrypt)来派生每个用户的根密钥。Bouncy Castle具有Java和C#的SCrypt实现,以及它自己的密钥包装实现。或者,您可以在这里找到PHP SCrypt实现

但是请记住,根据您的方案,如果用户忘记了密码,则由于其根密钥是从密码派生的,因此您将无法恢复其加密数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

绑定PasswordBox密码不是一个好主意吗?

来自分类Dev

在Windows注册表中存储自定义文本是一个好主意吗?

来自分类Dev

将数据作为键存储在具有空/空值的HashMap中是一个好主意吗?

来自分类Dev

将“ screen -r”放在我的.bashrc中是一个好主意吗?

来自分类Dev

将所有帮助程序类合并到一个巨大的类中是一个好主意吗?

来自分类Dev

将数组存储为字段值或将数组值存储为记录是一个好主意吗?

来自分类Dev

让 SQL 表条目引用同一个表中的其他 ID 是个好主意吗?

来自分类Dev

为UI的一部分创建另一个过程是一个好主意吗?

来自分类Dev

提取大量String文字是一个好主意吗?

来自分类Dev

组合实例VBO是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

使用NTFS压缩是一个好主意吗?

来自分类Dev

组合实例VBO是一个好主意吗?

来自分类Dev

别名cd推送-这是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

将带有标签的整个xml文件(.xml)文档存储在mongodb中是一个好主意吗?

来自分类Dev

将ID从一个视图传递到另一个视图并将其存储在另一个表中

来自分类Dev

在Haskell中嵌套对是一个好主意

来自分类Dev

在Haskell中嵌套对是一个好主意

来自分类Dev

片段将所有导航控件委托给Activity是一个好主意吗?

来自分类Dev

将Any用作Union类型是一个好主意吗?

来自分类Dev

片段将所有导航控件委派给Activity是一个好主意吗?

来自分类Dev

将实例传递给__init__。这是一个好主意吗?

来自分类Dev

将表单存储在一个文件中,再用另一个HTML文件访问它吗?

来自分类Dev

将变量存储在另一个变量中

来自分类Dev

将行计数存储在另一个表中的一个好习惯是什么?

来自分类Dev

使用宏在C中实现通用向量。这是一个好主意吗?

来自分类Dev

临时扩展Java中的现有对象-这是一个好主意吗?

来自分类Dev

在C ++构造函数中循环是一个好主意吗?

Related 相关文章

  1. 1

    绑定PasswordBox密码不是一个好主意吗?

  2. 2

    在Windows注册表中存储自定义文本是一个好主意吗?

  3. 3

    将数据作为键存储在具有空/空值的HashMap中是一个好主意吗?

  4. 4

    将“ screen -r”放在我的.bashrc中是一个好主意吗?

  5. 5

    将所有帮助程序类合并到一个巨大的类中是一个好主意吗?

  6. 6

    将数组存储为字段值或将数组值存储为记录是一个好主意吗?

  7. 7

    让 SQL 表条目引用同一个表中的其他 ID 是个好主意吗?

  8. 8

    为UI的一部分创建另一个过程是一个好主意吗?

  9. 9

    提取大量String文字是一个好主意吗?

  10. 10

    组合实例VBO是一个好主意吗?

  11. 11

    一个好主意是为此使用复合模式吗?

  12. 12

    使用NTFS压缩是一个好主意吗?

  13. 13

    组合实例VBO是一个好主意吗?

  14. 14

    别名cd推送-这是一个好主意吗?

  15. 15

    一个好主意是为此使用复合模式吗?

  16. 16

    将带有标签的整个xml文件(.xml)文档存储在mongodb中是一个好主意吗?

  17. 17

    将ID从一个视图传递到另一个视图并将其存储在另一个表中

  18. 18

    在Haskell中嵌套对是一个好主意

  19. 19

    在Haskell中嵌套对是一个好主意

  20. 20

    片段将所有导航控件委托给Activity是一个好主意吗?

  21. 21

    将Any用作Union类型是一个好主意吗?

  22. 22

    片段将所有导航控件委派给Activity是一个好主意吗?

  23. 23

    将实例传递给__init__。这是一个好主意吗?

  24. 24

    将表单存储在一个文件中,再用另一个HTML文件访问它吗?

  25. 25

    将变量存储在另一个变量中

  26. 26

    将行计数存储在另一个表中的一个好习惯是什么?

  27. 27

    使用宏在C中实现通用向量。这是一个好主意吗?

  28. 28

    临时扩展Java中的现有对象-这是一个好主意吗?

  29. 29

    在C ++构造函数中循环是一个好主意吗?

热门标签

归档