【问题标题】:SQLCipher security against multiple access attempts (Android)防止多次访问尝试的 SQLCipher 安全性 (Android)
【发布时间】:2014-08-04 00:08:00
【问题描述】:

因此,CommonsWare 书似乎建议(在位置 30091)SQLcipher 具有许多保护措施,可防止用户复制数据库并手动尝试许多不同的密码来猜测正确的版本。任何人都可以详细说明此类安全功能吗?数据库在连续尝试 30 次后是否会锁定?

【问题讨论】:

    标签: android sqlcipher


    【解决方案1】:

    这是使用的加密类型。 SQL Cipher 使用 256 位 AES 加密。这种形式的加密对于暴力攻击非常安全(即以编程方式尝试通过尝试每个可能的值来尝试猜测加密密钥)。

    This article 很好地描述了 AES 的安全性。为了量化这一点,文章指出:

    如果您假设:地球上的每个人都拥有 10 台计算机。地球上有 70 亿人。这些计算机中的每一台都可以测试 1 每秒十亿个键组合。平均而言,您可以破解密钥 在测试了 50% 的可能性之后。那么地球人口 可以破解一个加密密钥 77,000,000,000,000,000,000,000,000 年!

    【讨论】:

    • 很酷,谢谢。对解密任意数据库的时间有一个估计值很有趣。
    【解决方案2】:

    谁能详细说明这些安全功能?数据库在连续尝试 30 次之后是否会锁定?

    否,但它默认使用 64,000 轮 PBKDF2。引用the Wikipedia article on PBKDF2:

    PBKDF2 将伪随机函数(例如加密哈希、密码或 HMAC)与盐值一起应用于输入密码或密码短语,并重复该过程多次以生成派生密钥,然后可将其用作密码关键是后续操作。增加的计算工作使密码破解变得更加困难,并且被称为密钥拉伸。

    基本上,攻击者有两种选择:

    1. 尝试诸如字典攻击之类的事情(例如,针对常用密码列表进行测试)。 PBKDF2 轮次增加了每次检查的开销,因此除了最弱的密码之外,破解密码短语将花费过多的时间。

    2. 绕过 PBKDF2 开销并尝试直接使用生成的派生密钥进行攻击。在这种情况下,要尝试的可能键太多了,因此再次找到所需的键变得不切实际。

    【讨论】:

      【解决方案3】:

      SQLCipher 设计和安全功能在here 中有详细描述。源代码也可以在here 上查看。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        相关资源
        最近更新 更多