aboutsummaryrefslogtreecommitdiffstats
path: root/doc/faq.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/faq.txt')
-rw-r--r--doc/faq.txt203
1 files changed, 203 insertions, 0 deletions
diff --git a/doc/faq.txt b/doc/faq.txt
new file mode 100644
index 000000000..fe1014e82
--- /dev/null
+++ b/doc/faq.txt
@@ -0,0 +1,203 @@
+
+Frequantly Asked Questions
+========================================
+
+What is this thing?
+----------------------------------------
+
+Botan is a library written in C++ which provides a fairly high level
+and C++-ish interface to a number of different crypto algorithms. In
+addition to the bare algorithms there is also support for number of
+standards and de-facto standards like X.509v3 certificates, and
+various useful constructs like format-preserving encryption, all or
+nothing transforms, and secret splitting.
+
+Which release should I use?
+----------------------------------------
+
+The library is normally released along two different trees, termed
+stable and development. The stable tree is a branch off the main line,
+and typically only sees bug fixes; almost all new development occurs
+in the unstable/development releases. The primary issue is not
+stability of the program (bugs of course do occur, and are more likely
+to occur in code that is more in flux), but rather stability of API
+and ABI. In particular, you should not expect any level of ABI
+stability between releases on the development branch, and API changes
+may be made without notice. Feel free to send comments on API changes,
+or API problems, to the list.
+
+If you want to ship a binary that is usable out of the box on a Linux
+distro that ships botan (most do), or you want to ensure you're not
+having to track a moving target, you'll probably prefer using the
+stable releases. If you want to get the latest features, the
+development releases are the obvious choice. If you're building an
+application that will embed botan into it (without relying on a shared
+library), you want to use an amalgamation build, which basically turns
+botan into a single header and a single source file which you can
+easily include in your existing application build; this feature is
+currently only available in the development trees.
+
+The self-test program can't locate the library
+-----------------------------------------------
+
+Are you sure either the current working directory ('.') or the
+directory botan is building into are in the dynamic library path? On
+many Unix systems this is controlled by the ``LD_LIBRARY_PATH``
+variable. You can add the currently directory to the list of
+directories to search with this Bourne shell command::
+
+ $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
+
+If you install the library into a well known location like
+``/usr/local/lib``, then probably no particular
+``LD_LIBRARY_PATH`` needs to be set.
+
+My program aborts with any message
+----------------------------------------
+
+Does your main function wrap all code inside a try/catch block? If an
+exception is thrown and is not caught, many C++ runtimes simply crash
+the process without providing any sort of diagnostic.
+
+Is the library thread-safe?
+----------------------------------------
+
+Yes, botan is thread safe. However, because mutual exclusion depends
+on OS specific code, you must load a module to help. POSIX threads and
+Win32 critical sections are both supported out of the box, other
+thread libraries are very easy to add. To enable thread safe
+operation, include "thread_safe" in the string you pass to
+``Botan::LibraryInitializer`` constructor. If for whatever reason a
+working mutex implementation cannot be found, LibraryInitializer will
+throw an exception rather than continue operating in a bad state.
+
+How do I load this key generated by OpenSSL into botan?
+--------------------------------------------------------
+
+The encrypted key format used by the ``openssl`` command line tool is
+undocumented and apparently specific to OpenSSL. The easiest approach
+is to convert it to the (standard) PKCS #8 format, using::
+
+ openssl pkcs8 -topk8 -in my_key.pem
+
+Add ``-nocrypt`` to the command line if you want the resulting PKCS #8
+file to be unencrypted, otherwise it will ask you for a new password
+to use.
+
+For unencrypted keys, you can also manually decode the parameters
+using the existing PEM and BER support; see `this post
+<http://lists.randombit.net/pipermail/botan-devel/2010-June/001157.html>`_
+to the dev list for an example.
+
+Is botan FIPS 140 certified?
+----------------------------------------
+
+No version of botan has been certified under FIPS 140. This is
+unlikely to happen unless/until an organization is willing to fund and
+shepherd the validation process, which typically requires several
+months and many thousands of dollars.
+
+Is this thing safe to use?
+----------------------------------------
+
+The primary author/maintainer (Jack Lloyd) has 5+ years of experience
+reviewing code for security flaws, and has additionally performed
+several FIPS 140 validations of hardware and software crypto
+implementations. However the library has never undergone an
+*impartial* third-party security review, and thus it is entirely
+possible/probable that a number of exploitable flaws remain in the
+source. (If your company is interested in handling such a review,
+please contact the maintainers).
+
+There has been one known security flaw. Between versions 0.7.8
+(released Feb 2002) and 1.3.7 (released Dec 2003), the ``es_unix``
+module, which runs Unix programs to gather entropy for seeding a
+random number generator, ran programs by invoking the ``popen``
+library function with commands with no leading directory names. This
+means setuid or setgid programs that used this entropy source could be
+tricked into executing arbitrary programs via manipulation of the PATH
+variable. Later versions will only search through specific (presumed
+safe) directories like ``/usr/bin``; the list of directories to search
+can be controlled by the application.
+
+Is botan vulnerable to timing attacks?
+----------------------------------------
+
+Botan's public key implementations do make some attempt to defend
+against timing attacks; random blinding is used to protect all RSA,
+Rabin-Williams, ElGamal, and Diffie-Hellman private key operations.
+
+Public key algorithms implemented using the Chinese Remainder Theorem
+(RSA and Rabin-Williams) are subject to a catastrophic failure: if a
+computational error (either induced by an attacker or merely
+accidental) occurs during the private key operation, the private key
+can be revealed. Other, more suble, fault attacks are possible against
+other schemes. For this reason, private key operations are checked
+for consistency with the public key - if the results are not
+consistent, then an exception is thrown indicating an error has
+occurred rather than release information that might compromise the
+key.
+
+AES implementations are usually quite vulnerable to timing attacks.
+The table based implementation of AES included in botan uses small
+tables in the first and last rounds which makes such attacks somewhat
+more difficult. Alternate implementations of AES using SSSE3 and
+AES-NI instruction sets are also included, and run in constant time,
+but of course require a processor that supports these instruction
+sets.
+
+I think I've found a security flaw. What should I do?
+------------------------------------------------------------
+
+You can do any combination of:
+
+* Contact the current lead maintainer personally; currently
+ `Jack Lloyd <http://www.randombit.net>`_
+ (`personal PGP key` <http://www.randombit.net/pgpgkey.html`_)
+
+* Email the `development list
+ <http://lists.randombit.net/mailman/listinfo/botan-devel>`_
+
+* File a bug in `Bugzilla <http://bugs.randombit.net/>`_
+
+Does botan support SSL/TLS, SSH, S/MIME, OpenPGP...
+------------------------------------------------------------
+
+Support for SSL/TLS is included in the most recent development
+releases (1.9.x). Currently SSLv3 and TLS 1.0 and 1.1 are supported.
+
+`NetSieben SSH <http://netsieben.com/products/ssh/>`_ is an open
+source SSHv2 implementation that uses botan.
+
+A preliminary and very incomplete implementation of CMS (the crypto
+layer underlying S/MIME) is included in <tt>src/cms</tt>, but it needs
+a lot of love and attention before being truly useful.
+
+There is currently no support for OpenPGP.
+
+Will it work on my platform XYZ??
+----------------------------------------
+
+The most common stumbling block is a compiler that is buggy or can't
+handle modern C++ (specifically, C++98). Check out the `build list
+<http://botan.randombit.net/builds.html>`_ for a sense of which
+platforms are actively being tested.
+
+I'm not feeling this, what can I use instead?
+------------------------------------------------------------
+
+* `Crypto++ <http://www.cryptopp.com/>`_ is another C++ crypto
+ library. Its API is more heavily based on templates and in general
+ has a very different design philosophy from botan - so if you feel
+ botan's API is not a good match, you may well like Crypto++.
+
+* `OpenSSL <http://www.openssl.org>`_ is written in C and mostly
+ targeted to being an SSL/TLS implementation but there is a lot of
+ other stuff in there as well.
+
+* `XySSL <http://www.ohloh.net/projects/xyssl>`_ is a C library
+ providing a very small footprint crypto library and SSL
+ implementation.
+
+* `Adam Shostack <http://www.homeport.org/~adam/crypto/>`_ maintains a
+ (somewhat out of date) list of open source crypto libraries.