Tree @HEAD (Download .tar.gz)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | # Codecrypt The post-quantum cryptography tool. #### About This is a GnuPG-like unix program for encryption and signing that uses only quantum-computer-resistant algorithms: - McEliece cryptosystem (compact QC-MDPC variant) for encryption - Hash-based Merkle tree algorithm (FMTSeq variant) for digital signatures Codecrypt is free software. The code is licensed under terms of LGPL3 in a good hope that it will make combinations with other tools easier. #### Why this? Go read http://pqcrypto.org/ #### Links - infopage: http://e-x-a.org/codecrypt/ - *package downloads*: http://e-x-a.org/codecrypt/files/ #### Distro packages - Gentoo packages: https://packages.gentoo.org/packages/app-crypt/codecrypt with current ebuild usually available at http://e-x-a.org/codecrypt/files - Debian packages: `apt-get install codecrypt` - Arch linux: see https://aur.archlinux.org/packages/codecrypt/ #### Documentation There is a complete, UNIXy manual page supplied with the package. You can view it online here: http://e-x-a.org/codecrypt/ccr.1.html ##### Used cryptography overview To achieve the stated goal, codecrypt uses a lot of (traditional, but "quantum-secure") cryptographic primitives. Choices of primitives were based on easy auditability of design, simplicity and provided security. The git repo of codecrypt contains `doc/papers` with an unsorted heap of academic papers and slides about relevant topics. Stream ciphers used: - ChaCha20, the recommended choice from djb - XSynd stream cipher as an interesting and nontraditional candidate also based on assumptions from coding theory; used NUMS (it requires lot of NUMS) are explained in `doc/nums` directory in the repo. - Arcfour for initial simplicity of implementation. After recent statistical attacks I cannot recommend using any RC4 variant anymore, but provided padding and the "offline-only" usage of codecrypt keeps the usage mostly secure. CRHFs used: - Cubehash variants were selected for implementation ease, really clean design, quite good speed and flexibility of parameter choices. This is also the only hash possibility when Crypto++ library is not linked to codecrypt. KeyIDs are CUBE256 hashes of corresponding serialized public keys. - ripemd128 for small hashes - tiger192 is used as an alternative for Cubehash for 192bit hashes - There's always a variant with SHA-256, SHA-384 or SHA-512. Signature algorithms: - FMTSeq with many possibilities and combinations of aforementioned CRHFs - SPHINCS256 support is scheduled for next release Encryption algorithms: - MDPC McEliece on quasi-cyclic matrices. The implementation uses some tricks to speedup the (pretty slow) cyclic matrix multiplication (most notably libfftm3 in this version). For padding using the Fujisaki-Okamoto scheme, the cipher requires a stream cipher and a CRHF, used ciphers and CRHFs are specified in the algorithm name -- e.g. MCEQCMDPC128FO-CUBE256-CHACHA20 means that the parameters are tuned to provide 128bit security, uses CUBE256 hash, and ChaCha20 stream cipher. - Quasi-dyadic McEliece was included in codecrypt as an original algorithm, but is now broken and prints a warning message on any usage. Caveats: Cryptography is **not intended for "online" use**, because some algorithms (especially the MDPC decoding) are (slightly) vulnerable to timing attacks. ## Quick How-To Everything is meant to work mostly like GnuPG, but with some good simplicity margin. Let's play with random data! ccr -g help ccr -g sig --name "John Doe" # your signature key ccr -g enc --name "John Doe" # your encryption key ccr -K #watch the generated keys ccr -k ccr -p -a -o my_pubkeys.asc -F Doe # export your pubkeys for friends #(now you should exchange the pubkeys with friends) #see what people sent us, possibly check the fingerprints ccr -inaf < friends_pubkeys.asc #import Frank's key and rename it ccr -ia -R friends_pubkeys.asc --name "Friendly Frank" #send a nice message to Frank (you can also specify him by @12345 keyid) ccr -se -r Frank < Document.doc > Message_to_frank.ccr #receive a reply ccr -dv -o Decrypted_verified_reply.doc <Reply_from_frank.ccr #rename other's keys ccr -m Frank -N "Unfriendly Frank" #and delete pukeys of everyone who's Unfriendly ccr -x Unfri #create hashfile from a large file ccr -sS hashfile.ccr < big_data.iso #verify the hashfile ccr -vS hashfile.ccr < the_same_big_data.iso #create (ascii-armored) symmetric key and encrypt a large file ccr -g sha256,chacha20 -aS symkey.asc ccr -eaS symkey.asc -R big_data.iso -o big_data_encrypted.iso #decrypt a large file ccr -daS symkey.asc <big_data_encrypted.iso >big_data.iso #password-protect all your private keys ccr -L #protect a symmetric key using another symmetric key ccr -L -S symkey1 -w symkey2 #password-protect symkey2 with a custom cipher ccr -L -S symkey2 -w @xsynd,cube512 ## Option reference For completeness I add listing of all options here (also available from `ccr --help`) Usage: ./ccr [options] Common options: -h, --help display this help -V, --version display version information -T, --test perform (probably nonexistent) testing/debugging stuff Global options: -R, --in set input file, default is stdin -o, --out set output file, default is stdout -E, --err the same for stderr -a, --armor use ascii-armored I/O -y, --yes assume that answer is `yes' everytime Actions: -s, --sign sign a message -v, --verify verify a signed message -e, --encrypt encrypt a message -d, --decrypt decrypt an encrypted message Action options: -r, --recipient encrypt for given user -u, --user use specified secret key -C, --clearsign work with cleartext signatures -b, --detach-sign specify file with detached signature -S, --symmetric enable symmetric mode of operation where encryption is done using symmetric cipher and signatures are hashes, and specify a filename of symmetric key or hashes Key management: -g, --gen-key generate keys for specified algorithm -g help list available cryptographic algorithms -k, --list list the contents of keyring -K, --list-secret -i, --import import keys -I, --import-secret -p, --export export keys -P, --export-secret -x, --delete delete matching keys -X, --delete-secret -m, --rename rename matching keys -M, --rename-secret -L, --lock lock secrets -U, --unlock unlock secrets Key management options: -F, --filter only work with keys with matching names -f, --fingerprint format full key IDs nicely for human eyes -N, --name specify a new name for renaming or importing -n, --no-action on import, only show what would be imported -w, --with-lock specify the symmetric key for (un)locking the secrets -w @SPEC ask for password and expand it to a symmetric key of type SPEC for (un)locking the secret ## Disclaimer Codecrypt eats data. Use it with caution. Read the F manual. Author is a self-taught cryptographer. |
Commit History @HEAD
0
»»
- Upstream version 1.7.5 Mirek Kratochvil 8 years ago
- Imported Upstream version 1.7.5 Mirek Kratochvil 8 years ago
- Update debian/changelog Ximin Luo 8 years ago
- Merge remote-tracking branch 'origin/master' Ximin Luo 8 years ago
- Import version 1.7.4-1 that was already uploaded through a different RFS Gianfranco Costamagna (commit: Ximin Luo) 8 years ago
- Squash debian/changelog in preparation for upload Ximin Luo 8 years ago
- Set Maintainer to the pkg-privacy team Ximin Luo 8 years ago
- unreleased 1.7.4-2 changelog Mirek Kratochvil 8 years ago
- https debian Format: link Mirek Kratochvil 8 years ago
- gbp: pristine-tar + auto lintian Mirek Kratochvil 8 years ago
- hardening by default Mirek Kratochvil 8 years ago
- https link to website Mirek Kratochvil 8 years ago
- Merge tag 'upstream/1.7.4' Mirek Kratochvil 8 years ago
- dch 1.7.3-2 Mirek Kratochvil 8 years ago
- Imported Upstream version 1.7.4 Mirek Kratochvil 8 years ago
- rules: remove obsolete `make dist' glue Mirek Kratochvil 8 years ago
- Depends: remove libs already included in shlibs:Depends Mirek Kratochvil 8 years ago
- Build-deps: autotools-dev not needed for dist-only repo Mirek Kratochvil 8 years ago
- Licence fix Mirek Kratochvil 8 years ago
- Remove invalid autoreconf stuff. Mirek Kratochvil 8 years ago
- Watch it on the newly-supported https. Mirek Kratochvil 8 years ago
- Humanize the short package name. Mirek Kratochvil 8 years ago
- a bit of standardization Mirek Kratochvil 8 years ago
- Imported Upstream version 1.7.3 Mirek Kratochvil 8 years ago
- Imported Debian patch 1.7.3-1 Mirek Kratochvil 8 years ago
0
»»