在mnesia加密

Gee*_*eek 1 encryption erlang ejabberd

如何加密mnesia数据库以及加密mnesia数据库最安全的方法是什么.

在erlang中是否有任何内置方法可以高安全性地加密和解密数据?

zxq*_*xq9 5

简短的回答

没有.

答案很长

数据库加密不是一个简单的主题.

您必须首先确定"加密数据库"的含义.这是否意味着内存中的数据不可读?它在磁盘上是不可读的?它是外部不透明的blob除了(可能没有上下文/无意义)单键之外是不可见的吗?一切都是单向的吗?是否需要高速比较哈希值?如果可逆的话,如何访问密钥?加密是在数据库中执行的,还是db只存储东西?等等...

在Mnesia(和任何其他DB)中,值必须可读,才能在查询中使用.在像Postgres这样具有加密数据库列的重型数据库中,意味着数据在磁盘上加密,而关于Postgres的其他内容意味着你永远无法知道任何给定表中有多少内存 - 这意味着磁盘数据必须每次遍历尚未缓存在内存中的行时,都可以动态解密和加密.性能时间受到严重影响.

可以使Mnesia(和ETS表)一起将所有活动数据保存在内存中 - 并且在内存中查询数据时必须将其解密.因为您可以设置保存到磁盘的明确标准,所以将磁盘写入过程包装在对加密库的调用中是相当简单的,因此将其加密到磁盘上,但是在内存中是纯文本(因此很有用).

另一方面,你对钥匙所做的是另一个问题......

大多数时候,当我们讨论数据库加密时,我们真正的意思是,是否有一种方法将用户密码存储为哈希而不是明文(而不是以这种方式存储整个数据存储中的每个值).这是一个非常不同的问题,因为要使密码有用,它们只需要具有可比性,而且根本不需要保留原始密码.(例如,考虑此处使用的一组简短函数来接受,加密,加密和验证密码.)

"加密数据库"的含义需要澄清才能说任何数据系统提供加密功能,并且总是存在权衡.