3. 数据库加密方案
3.1 数据库加密原理
目前主流的数据库都采用了各种安全措施,主要包括用户认证、访问控
制、数据加密存储和数据库操作审计等措施。
用户认证:用户或者程序向数据库提供自己的有效身份证明,数据库鉴别用户的身份是否合法,只有合法的用户才能存取数据库中的数据。用户认证是所有安全机制的前提,只有通过认证才能进行授权访问和审计。
访问控制:数据库管理系统为不同的用户分配不同的权限,保证用户只能进行授权的访问。目前,一些大型数据库(如Oracle 等)都采用了基于角色的访问控制机制,即为用户授予不同的角色,如db—owner,security administrator 等,不同的角色允许对数据库执行不同的操作。
数据库加密:用户认证以及访问控制对访问数据库进行了控制,但攻击者可能会利用操作系统或数据库漏洞,或物理接触计算机,而直接接触数据库系统文件,从而可能绕过身份认证和存取控制而直接窃取或篡改数据库内容。对数据库中的数据进行加密是防范这类威胁的有效手段。
数据库操作审计:监视和记录用户对数据库所做的各种操作的安全机制,它记录并存储用户的操作,用于事后分析,以检查导致数据库现状的原因以及提供追踪攻击者的线索。数据库的备份与恢复:当数据库发生不可恢复的故障时,可以将数据库恢复到先前的某个一致性的状态。
3.2 SQLite 加密
由于SQLite 是开放源码的,并且在其源码中预留了加密接口,我们可以通过实现其预留的加密接口实现口令认证和数据库加密以完善其加密机制。
3.2.1 口令认证
SQLite 数据库文件是一个普通文本文件,对它的访问首先依赖于文件的访问控制。在此基础上,再增加进一步的口令认证,即在访问数据库时必须提供正确的口令,如果通过认证就可以对数据库执行创建、查询、修改、插入、删除和修改等操作;否则,不允许进一步的访问。
3.2.2 数据库加密
数据库加密有两种方式:
1)在数据库管理系(Data Base Management System,DBMS)中实现加密功能,即在从数据库中读数据和向数据库中写数据时执行加解密操作;
2)应用层加密,即在应用程序中对数据库的某些字段的值进行加密,DBMS 管理的是加密后的密文。
前者与DBMS 结合好,加密方式对用户透明,但增加了DBMS 的负载,并且需要修改DBMS的原始代码;后者则需要应用程序在写入数据前加密,在读出数据后解密,因而会增大应用程序的负载。在此,通过实现SQLite 源码中预留的加密接口,实现DBMS 级的加密。
3.2.3 使用xxx-tea 算法加密SQLite 数据库
微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA) 都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。
TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham在 1994 年设计的。该算法使用 128 位的密钥为 64 位的信息块进行加密,它需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9)。
之后 TEA 算法被发现存在缺陷,作为回应,设计者提出了一个 TEA 的升级版本——XTEA(有时也被称为“tean”)。XTEA 跟 TEA 使用了相同的简单运算,但它采用了截然不同的顺序,为了阻止密钥表攻击,四个子密钥(在加密过程中,原 128 位的密钥被拆分为 4 个 32 位的子密钥)采用了一种不太正规的方式进行混合,但速度更慢了。
在跟描述 XTEA 算法的同一份报告中,还介绍了另外一种被称为 Block TEA 算法的变种,它可以对 32 位大小任意倍数的变量块进行操作。该算法将 XTEA 轮循函数依次应用于块中的每个字,并且将它附加于它的邻字。该操作重复多少轮依赖于块的大小,但至少需要 6 轮。该方法的优势在于它无需操作模式(CBC,OFB,CFB 等),密钥可直接用于信息。对于长的信息它可能比 XTEA 更有效率。
在 1998 年,Markku-JuhaniSaarinen 给出了一个可有效攻击 Block TEA 算法的代码,但之后很快 David J. Wheeler 和 Roger M.Needham 就给出了 Block TEA 算法的修订版,这个算法被称为 XXTEA。XXTEA 使用跟 Block TEA 相似的结构,但在处理块中每个字时利用了相邻字。它利用一个更复杂的 MX 函数代替了 XTEA 轮循函数,MX 使用 2 个输入量。
分享到:
相关推荐
在Android应用开发中,SQLite是一个...通过以上介绍,我们了解了在Android中使用SQLCipher实现SQLite数据库加密的重要性、方法以及注意事项。在实际项目中,可以根据需求选择适合的加密策略,确保应用的数据安全性。
"基于Android平台的SQLite...5. SQLite数据库加密的重要性:SQLite数据库加密是Android平台的主要安全issue之一,本文研究了基于Android平台的SQLite数据库加密问题,并提出了一个优化的AES-128算法整库加密方案。
wxsqlite3是一个针对SQLite的扩展,它提供了一种在Android上对SQLite数据库进行加密的方法。这个库通常包含了C/C++编写的原生代码(.so文件),这些代码是基于SQLite源码进行修改和封装的,目的是实现数据库的加解密...
1. SQLite数据库加密: SQLite提供了一种名为SQLite Encryption Extension (SEE) 的机制来实现数据库加密。SEE通过在SQLite内部添加一个加密层,使得数据在写入磁盘之前先进行加密,读取时再解密。这确保了即使...
- **加密**: 可以使用第三方库对SQLite数据库进行加密,增强数据安全性。 - **索引**: 为经常用于查询的字段创建索引,提高查询速度。 - **批量操作**: 避免频繁的单条数据操作,尽量使用批处理来提升性能。 - **...
标题"安卓SQLite数据库相关-安卓Androidsqlite万能数据库.rar"暗示了这个压缩包包含了一系列与Android平台上SQLite数据库使用相关的资源,可能是源代码、教程、示例或者其他工具。由于描述中提到“太多无法一一验证...
10. **数据库安全**: 尽管SQLite数据库文件存储在设备上,但应尽量避免敏感数据明文存储,可以考虑加密存储或者采用更安全的身份验证机制。 在"SQLite"这个压缩包文件中,可能包含了相关的源代码示例,包括...
ormlite框架整合sqlcipher数据库加密实例,注意调配编译版本
在创建SQLite数据库时,我们通常会经历以下步骤: 1. **安装SQLite库**:首先,你需要在开发环境中安装SQLite的库。对于不同的操作系统,安装方式有所不同。在Linux或macOS中,可以通过包管理器(如apt或brew)进行...
总的来说,Android上的SQLCipher为SQLite数据库提供了安全的加密解决方案。通过集成SQLCipher库,设置加密密钥,以及在SQLiteOpenHelper的适当方法中使用加密的数据库对象,可以确保你的数据在存储和使用过程中得到...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻量级的数据库系统,适用于移动设备。SQLite被集成在Android操作系统中,...学习并理解这些知识点,将有助于你更好地在Android项目中运用SQLite数据库。
本案例将详细介绍如何在Android应用中实现SQLite数据库的整体加密。 1. **SQLite数据库简介** SQLite是一个轻量级的、自包含的、可移植的SQL数据库引擎,无需服务器进程,可以直接嵌入到应用程序中。在Android系统...
在Android应用开发中,SQLite数据库是一个轻量级的、嵌入式的关系型数据库,它非常适合存储应用程序中的小规模数据。本教程将详细讲解如何利用SQLiteOpenHelper和SQLiteDatabase类来实现登录注册功能,以及如何处理...
本文将深入探讨如何在Android应用中通过代码加载外部的SQLite数据库,这通常在应用程序需要预装一些初始数据或者有特定数据导入需求时会用到。 首先,我们需要了解Android对SQLite的支持。Android提供了...
- **加密数据库**:可以使用第三方库如SQLCipher来对SQLite数据库进行加密,保护用户数据的安全。 - **权限控制**:在AndroidManifest.xml中设置合适的权限,限制其他应用访问数据库。 综上所述,Android中的...
为了解决这个问题,"sqlite-encrypt"应运而生,它是一种专门针对Android平台的SQLite数据库加密解决方案。 sqlite-encrypt库允许开发者在SQLite数据库上添加一层额外的安全保护,通过对数据库文件进行加密,确保...
使用wxsqlite3提供的加密动态库,通过sqlite simple delphi包装类连接sqlite3.dll,自己扩展了sqlite simple delphi包装类,方便Delphi调用,还增加了CheckDbIsEncrypt函数,判断数据库有没有加密。具体使用请参考...
SQLite数据库管理系统在Android设备上广泛使用,因为它高效、可靠且易于使用。本文将深入探讨如何在Android的浏览器环境中管理和操作SQLite数据库。 首先,理解SQLite数据库的基本概念至关重要。SQLite是一个嵌入式...
"android-sqlite-encrypt"正是为了解决这一问题而设计的SDK,它为Android开发者提供了一个强大的SQLite数据库加密解决方案。 "android-sqlite-encrypt"库的核心功能在于对SQLite数据库进行透明的加密,这意味着...
这个工具集包含了用于管理SQLite数据库的命令行工具,如`sqlite3.exe`用于交互式操作数据库,`sqlite3_analyzer.exe`用于分析数据库的大小和碎片,以及`sqlite3.dll`是SQLite的动态链接库文件,可用于其他Windows...