Safe Archive Manager











This program is a general-purpose encrypting archiver in Java: it packs a collection of files into a self-extracting Java .jar file. This program is distributed under the Gnu General Public Licence for all non-already owned parts.



Please read and understand the DISCLAIMER first.

Requirements:

This program is multi-platform but require a Java Runtime Environment version 1.1 or higher be installed. Generated archives require an equivalent runtime environment be installed, but not necessarily the same (thanks to Java).

Running the program:

From command line, simply type « java sam.Sam nameOfArchive.jar nameOfDirectory » to create an archive. You can extract this archive on any Java-enabled system simply by double-clicking on it, or by typing « java \jar nameOfArchive.jar ». Please use « java sam.Sam -? » for more information on command-line options.

Accessing source files:

Complete source files for all parts of this program are included. All of them but the main ciphering algorithm Mars, Locki, Serpent, Rijndael, Frog, RC6 and Twofish are distributed under the GPL however. Those are included in this package as they are freely available through the World Wide Web, but all rights remain property of their respective authors. The complete javadoc-generated API documentation is also included here. In order to compile the source, you need a Java Development Kit version 1.1 or higher be installed on your system.



Confidentiality of electronic data relies on programs that mask the data so that only authorized people can access it. This usually involves one or more electronic keys used to encode and/or decode the data. Most of those programs rely on mathematical transforms that are CPU-inexpensive (in the order of seconds) in one way but rather expensive (in the order of months) to inverse. Because mathematics are beautiful however, such programs remain vulnerable to newly discovered trivial solutions; and because they are computer science programs written by humans they suffer the risk of implementation flaws. The objective of this program is to use a stack of extensively analyzed algorithms implemented on a fairly reliable language, so that cracking the system involves cracking all the algorithms.

The program reads data from a collection of files and encodes them into a self-extracting archive. Even assuming that the ciphers are flawless, it would still remain possible for an attacker to use structure informations or even full data parts of the unciphered data to tremendously reduce its search space. This is why data is first compressed, which is known as destructured in terms of Kolmogorov's complexity. The compression algorithm used is a basic implementation of the adaptive Huffman algorithm, for which the most common bytes are coded with the smallest bit sequences. Since this is adaptive, the tree is initially well-balanced, meaning that there is no initialization dictionnary; moreover, there is no clustering / block size limit in the compression procedure. In this way, any arbitrary ciphered sequence can be decoded to a data sequence (note in particular that files are processed as a single chained stream, while file names and lengths are saved separately and in uncoded form). Moreover, data are interleaved with stochastic data so that statistical attacks can not be applied (note in particular that the streams always starts with such data), because the state of the Huffman tree at any point is statistically unpredictible. In order to ensure this, data must not be random (which would lead to well-balanced trees): stochastic bytes are choosen within a smaller part of the 256 possible bytes, and even repeated consecutively a randomly-choosen number of times within the stochastic data block. On top of this process, the WAR algorithm shuffles a 2n-bytes wide buffer given a key of length n, so that attacking the algorithm requires dealing with an at least 2n-bytes wide chunk. In this way, as long as no implementation flaw remains, attacking this process involves trying blind brute force exhaustive search on rather large blocks. Thereafter the adjective « safe ».

For more details on the implementation, please browse the included API..

Disclaimer

This program is on version 0.3 only. It is fully functionnal through undiscovered bugs may subsist. It is not intended for mission critical nor production use. Bug tracking or feed back welcome.

IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS APPLICATION OR INFORMATION OR DOCUMENTATION FOUND HERE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE INFORMATION AND CODE AND DOCUMENTATION PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHOR HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.



Guillaume Lacôte, 2000, All rights reserved