libdb/docs/programmer_reference/env_encrypt.html

229 lines
10 KiB
HTML
Raw Permalink Normal View History

2011-09-13 17:44:24 +00:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Encryption</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
<link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" />
<link rel="up" href="env.html" title="Chapter 9.  The Berkeley DB Environment" />
<link rel="prev" href="env_security.html" title="Security" />
<link rel="next" href="env_remote.html" title="Remote filesystems" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
2012-11-14 21:35:20 +00:00
<p>Library Version 11.2.5.3</p>
2011-09-13 17:44:24 +00:00
</div>
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Encryption</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="env_security.html">Prev</a> </td>
<th width="60%" align="center">Chapter 9. 
The Berkeley DB Environment
</th>
<td width="20%" align="right"> <a accesskey="n" href="env_remote.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="env_encrypt"></a>Encryption</h2>
</div>
</div>
</div>
<p>
Berkeley DB optionally supports encryption using the Rijndael/AES
(also known as the Advanced Encryption Standard and Federal
Information Processing Standard (FIPS) 197) algorithm for
encryption or decryption. The algorithm is configured to use a
128-bit key. Berkeley DB uses a 16-byte initialization vector
generated using the Mersenne Twister. All encrypted information is
additionally checksummed using the SHA1 Secure Hash Algorithm,
using a 160-bit message digest.
</p>
<p>
The encryption support provided with Berkeley DB is intended to
protect applications from an attacker obtaining physical access to
the media on which a Berkeley DB database is stored, or an attacker
compromising a system on which Berkeley DB is running but who is
unable to read system or process memory on that system.
<span class="bold"><strong>
The encryption support provided with Berkeley DB will not
protect applications from attackers able to read system memory
on the system where Berkeley DB is running.
</strong></span>
</p>
<p>
To encrypt a database, you must configure the database for
encryption prior to creating it. If you are using a database
environment, you must also configure the environment for
encryption. In order to create an encrypted database within an
environment, you:
</p>
<div class="orderedlist">
<ol type="1">
<li>
<p>
Configure the environment for encryption using the
<a href="../api_reference/C/envset_encrypt.html" class="olink">DB_ENV-&gt;set_encrypt()</a> method.
</p>
</li>
<li>
<p>
Open the database environment.
</p>
</li>
<li>
<p>
Specify the <a href="../api_reference/C/dbset_flags.html#dbset_flags_DB_ENCRYPT" class="olink">DB_ENCRYPT</a> flag to the database handle.
</p>
</li>
<li>
<p>
Open the database.
</p>
</li>
</ol>
</div>
<p>
Once you have done that, all of the databases that you create in
the environment are encrypted/decrypted by the password you specify
using the <a href="../api_reference/C/envset_encrypt.html" class="olink">DB_ENV-&gt;set_encrypt()</a> method.
</p>
<p>
For databases not created in an environment:
</p>
<div class="orderedlist">
<ol type="1">
<li>
<p>
Specify the <a href="../api_reference/C/dbset_flags.html#dbset_flags_DB_ENCRYPT" class="olink">DB_ENCRYPT</a> flag to the database handle.
</p>
</li>
<li>
<p>
Call the <a href="../api_reference/C/dbset_encrypt.html" class="olink">DB-&gt;set_encrypt()</a> method.
</p>
</li>
<li>
<p>
Open the database.
</p>
</li>
</ol>
</div>
<p>
Note that databases cannot be converted to an encrypted
format after they have been created without dumping and re-creating
them. Finally, encrypted databases cannot be read on systems with
a different endianness than the system that created the encrypted
database.
</p>
<p>
Each encrypted database environment (including all its encrypted
databases) is encrypted using a single password and a single
algorithm. Applications wanting to provide a finer granularity of
database access must either use multiple database environments or
implement additional access controls outside of Berkeley DB.
</p>
<p>
The only encrypted parts of a database environment are its
databases and its log files. Specifically, the
<a class="xref" href="env_region.html" title="Shared memory regions">Shared memory regions</a> supporting
the database environment are not encrypted. For this reason, it
may be possible for an attacker to read some or all of an encrypted
database by reading the on-disk files that back these shared memory
regions. To prevent such attacks, applications may want to use
in-memory filesystem support (on systems that support it), or the
<a href="../api_reference/C/envopen.html#envopen_DB_PRIVATE" class="olink">DB_PRIVATE</a> or <a href="../api_reference/C/envopen.html#envopen_DB_SYSTEM_MEM" class="olink">DB_SYSTEM_MEM</a> flags to the <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> method, to
place the shared memory regions in memory that is never written to
a disk. As some systems page system memory to a backing disk, it
is important to consider the specific operating system running on
the machine as well. Finally, when backing database environment
shared regions with the filesystem, Berkeley DB can be configured
to overwrite the shared regions before removing them by specifying
the <a href="../api_reference/C/envset_flags.html#set_flags_DB_OVERWRITE" class="olink">DB_OVERWRITE</a> flag. This option is only effective in the
presence of fixed-block filesystems, journaling or logging
filesystems will require operating system support and probably
modification of the Berkeley DB sources.
</p>
<p>
While all user data is encrypted, parts of the databases and log
files in an encrypted environment are maintained in an unencrypted
state. Specifically, log record headers are not encrypted, only
the actual log records. Additionally, database internal page
header fields are not encrypted. These page header fields includes
information such as the page's <a href="../api_reference/C/lsn.html" class="olink">DB_LSN</a> number and position in the
database's sort order.
</p>
<p>
Log records distributed by a replication master to replicated
clients are transmitted to the clients in unencrypted form. If
encryption is desired in a replicated application, the use of a
secure transport is strongly suggested.
</p>
<p>
We gratefully acknowledge:
</p>
<div class="itemizedlist">
<ul type="disc">
<li>
Vincent Rijmen, Antoon Bosselaers and Paulo Barreto for writing
the Rijndael/AES code used in Berkeley DB.
</li>
<li>
Steve Reid and James H. Brown for writing the SHA1 checksum
code used in Berkeley DB.
</li>
<li>
Makoto Matsumoto and Takuji Nishimura for writing the Mersenne
Twister code used in Berkeley DB.
</li>
<li>
Adam Stubblefield for integrating the Rijndael/AES, SHA1
checksum and Mersenne Twister code into Berkeley DB.
</li>
</ul>
</div>
<p>
Berkeley DB 11g Release 2 supports encryption using Intel's
Performance Primitive (IPP) on Linux. This works only on Intel
processors. To use Berkeley DB with IPP encryption, you must have
IPP installed along with the cryptography extension. The IPP
performance is higher in most cases compared to the current AES
implementation. See
<a href="../installation/build_unix_conf.html#build_unix_conf.--with-cryptography" class="olink">--with-cryptography</a>
for more information. See the
<a class="ulink" href="http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-documentation/" target="_top">
Intel Documenation</a> for more information on IPP.
</p>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="env_security.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="env.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="env_remote.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Security </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Remote filesystems</td>
</tr>
</table>
</div>
</body>
</html>