Giter Club home page Giter Club logo

nescient's Introduction

Nescient

pypi license travis appveyor

nescient, n. (nesh-int) - from Latin 'unknowing', 'hidden'

Store, encrypt and decrypt files to and from encrypted, authenticated containers.

Nescient provides an easy-to-use, secure, and efficient means of file or memory level encryption.

Several use cases include:

  • Backing up multiple files to a reliable yet insecure location.
  • Providing additional, file-level encryption to supplement full disk encryption, securing packed files even while the machine is on with the disk-level encryption key loaded in memory.
  • Sharing files with others securely, by transferring a Nescient container through an insecure channel and providing a password through a separate secure channel.
  • Using Nescient's cryptographic classes to efficiently implement secure protocols.

Nescient is:

  • open source: It is licensed under the permissive MIT license.
  • multiplatform: As a Python project, Nescient works on all the major operating systems (Windows, macOS, and Linux)
  • transparent: The means with which Nescient encrypts and packs files is documented, and the algorithms used are tested both against official test vectors and arbitrary data to ensure correctness.
  • fast: All core crypto code is written in Cython and compiled to C extensions, making it fast enough to be practically usable for large files. The fastest cipher modes achieve speeds of 10 cycles/byte.

Nescient supports the following packing modes:

  • The AES block cipher for encryption, with either 128, 192, or 256 bit keys, in CBC mode, and SHA-256 for generating authentication tags.
  • The ChaCha20 stream cipher with 256 bit keys and SHA-256 for generating authentication tags.

Installation

Windows

Nescient is available as a pre-packaged, standalone Windows executable, downloadable from the github releases. The executable can be used in GUI-mode, by double-clicking, or can be run with command line arguments.

From PyPI

Nescient requires Python 3.4 or later.

Windows users installing Nescient as a Python package are strongly suggested to have a 64-bit Python installation on their machines. Otherwise, installation may require installing the Microsoft C++ Visual Build Tools to compile Nescient's C extensions.

Install Nescient from the Python Package Index (PyPI) by running pip install nescient.

Note

  • On most Linux systems, installation may require running pip with root permissions, or running pip install nescient --user instead.
  • On most Linux systems, there may be two versions of pip available: The Python 3 version is typically called pip3.

From Releases

An arbitrary stable (not development) release can be installed from the github releases by downloading the zip archive and running pip install <path-to-zip.

From latest source

Clone or download the git repo, navigate to the directory, then run:

python3 setup.py sdist
cd dist
pip install Nescient-<version>.tar.gz

Installing from source may require installing compilation tools.

Usage

Nescient has a GUI mode, which can be run by simply running nescient-ui, or nescient with no arguments.

Nescient can pack or unpack files into/from .nesc containers. Some typical usage might be:

nescient pack file1 file2

nescient unpack file1.nesc

Unless otherwise specified via command line flags, Nescient packs and unpacks files in place, overwriting their data.

Command line help can be viewed with nescient -h.

Development

Nescient versioning functions on a MAJOR.MINOR.PATCH.[DEVELOP] model. Only stable, non development releases will be published to PyPI. Because Nescient is still a beta project, the MAJOR increment will be 0. Minor increments represent new features. Patch increments represent problems fixed with existing features.

Planned features include:

  • New cipher modes for existing algorithms, like the GCM authenticated mode, and additional encryption algorithms.
  • Integrated compression when packing files.
  • GUI mode enhancements.
  • Documentation.

nescient's People

Contributors

aarant avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Forkers

bellyfat

nescient's Issues

Benchmark all modes (in GUI) sometimes hangs

When selecting 'Benchmark all modes' in the Options menu of the GUI, Nescient may hang for a long period of time.

Currently, benchmarking is a threaded activity; changing it to run in a new process will prevent this type of GUI lockup

Side-channel attacks possible against AES implementation

In line 64 of nescient.crypto.aes, the following line:

x[j] = SBOX[x[j]]

is potentially vulnerable to a side-channel attack based on cache timing, because the time to look up an element of the SBOX is not truly constant.

Potential fixes for this include:

  • Forcing Nescient's AES implementation to access every element of the SBOX each time, slowing speed but mitigating this vulnerability.
  • Switching to hardware or OS-based AES instructions/implementations which are secure against side-channel attacks.
  • Adding an algorithm more resistant to timing attacks (i.e ChaCha), specifying it as a default, and warning the user that side-channel attacks are possible when using AES.

Lack of native curses library on Windows

Nescient relies on the curses library in order to block terminal echo when entering passwords. Since there is no cross-platform port of curses, errors will occur when attempting to run on Windows.

ChaCha in multiprocessing mode fails to complete

Occasionally, and inconsistently, encrypting data with ChaCha20 and triggering the multiprocessing mode will result in some of the worker processes not being joined, causing the operation to hang.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.