I am pleased to announce that Jacksum 4 has been released! The current version is 4.0.2.
The step from 3.7 to 4 looks small, but it took three years, and it is bigger than the version number suggests. Jacksum 4 brings 97 new algorithms, new tools to judge the security of an algorithm, a much stricter verification mode, styles that match the native tools byte for byte, documentation in German, and a long list of fixes that make Jacksum more robust than ever. I call it the "trust, but verify" release ;-)
- Website: https://jacksum.net
- Detailed release notes: https://jacksum.net/en/release-notes.html
- Source code: https://github.com/jonelo/jacksum
Here is an eagle view comparison chart with Jacksum 3.7.0:
| Jacksum 3.7.0 | Jacksum 4.0.2 | |
|---|---|---|
| Algorithm support | ||
| Supported algorithms (including different lengths) | 489 | 586 |
| Default algorithm | SHA3-256 | SHA3-256 |
| Candidates from round 2 of the NIST SHA-3 competition 1 | no | yes |
| Candidates from round 1 of the NIST SHA-3 competition 2 | no | yes |
| Fugue 2.0, Romulus-H 3, belt-hash 4 | no | yes |
| Verification | ||
| Strict check that also fails if files have been added or removed | no | yes |
| Ignoring stored hashes, file sizes, or timestamps during a check | no | yes |
Hash values compared case-insensitively by -c, -e, and -w 5 | no | yes |
Algorithm investigation (--info) | ||
| Security state "broken" incl. an explanation | no | yes |
| Avalanche effect | no | yes |
| Output and input | ||
Output identical to md5, shasum, openssl dgst (3.x), and digest 6 | no | yes |
Style openssl111-dgst for the OpenSSL 1.1.1 names | no | yes |
Hash data base (hdb) style, used by ClamAV's sigtool | no | yes |
Styles full, without-hashes, without-sizes, without-timestamps, sizes-and-names, timestamps-and-names | no | yes |
| Timestamp formats in UTC | no | yes |
z-base-32 and BubbleBabble as input (-q, -k) | no | yes |
| Documentation | ||
Help in German (-h de) | no | yes |
Exact help search (--exact) | no | yes |
| Algorithm selection guide and use case cookbook (English and German) | no | yes |
| Library usage (API) | ||
| Query whether an algorithm is broken | no | yes |
| Bundled Bouncy Castle relocated, no clash with your own Bouncy Castle | no | yes |
| Requirements | ||
| Java required / recommended | 11+ / 17+ | 21+ / 25+ |
| License | GPLv3+ | GPLv3+ |
For the complete picture, including Jacksum 1.0.0 and 1.7.0 and a list of every supported algorithm, see the Feature Comparison Table in the wiki.
The highlights
97 new algorithms
Jacksum now supports 586 algorithms. With the candidates from rounds 1 and 2 of the NIST SHA-3 competition, Jacksum covers that competition much more completely. Fugue 2.0 is the tweak of Fugue that IBM published after the competition had ended. Romulus-H, belt-hash, and two new CRCs (crc64_nvme and crc32_go-koopman) complete the list.
Is my algorithm broken?
Jacksum can tell you now. The output of --info has a new section called "Security:" that says whether an algorithm is considered broken, and -V details also explains why:
$ jacksum -a sha1 --info -V details
...
Security:
broken: yes
yes, 02/2017: the first identical-prefix collision was computed
(SHAttered, 2^63.1), and in 01/2020 the first chosen-prefix
collision followed ...--info shows the avalanche effect of an algorithm as well, and programs that use Jacksum as a library can query the broken state through the API. If you are not sure which algorithm to pick, read the new Algorithm Selection Guide.
Better verification
--check-strict now also fails if files have been added to or removed from the directory, it prints the result in the summary, and the exit code follows it. With --ignore-hashes, --ignore-sizes, and --ignore-timestamps you decide which stored properties are checked. A file that cannot be read gets the new status ERROR instead of being reported as MISSING. And if a check file has been created with a different algorithm than the selected one, Jacksum names the cause rather than reporting every file as FAILED.
Better compatibility with other tools
The styles bsd, openssl-dgst, and solaris-digest-v now write the algorithm names that the native tools use, so their output is identical to md5, shasum --tag, sha256sum --tag, openssl dgst (OpenSSL 3.x and later), and digest -v on Solaris. If you need the OpenSSL 1.1.1 names (SHA256 instead of SHA2-256), use the new style openssl111-dgst. The new hdb style writes the hash data base format of ClamAV's sigtool.
More robust than ever
Jacksum 4 fixes a lot of bugs, in particular in the multi-threaded engine (out-of-memory errors, possible deadlocks, read errors that could go unnoticed), in the parser, in the encodings, and in a few algorithms. The releases 4.0.1 and 4.0.2 alone close more than 40 GitHub issues. Jacksum also no longer writes an HMAC key in plain text into the header of a check file. The bundled Bouncy Castle has been updated to 1.86.
Documentation in German
The help is available in German now (jacksum -h de), and so are the documents on GitHub. The new Use Cases cookbook (English and German) is organized by goal: "I want to solve this problem".
Please note before you upgrade
- Jacksum 4 requires Java 21 or later. Java 25 is recommended.
- An HMAC can no longer be calculated with the algorithms of the
asconfamily, because there is no standard-compliant HMAC for sponge-based hash functions. - Some algorithms return different values now, because the old values were wrong:
prng,fletcher16(input larger than 64 KiB),sum64(very large input), and truncated HMACs whose length is not a multiple of 8 bits. - The style
openssl-dgstuses the OpenSSL 3.x names now. Useopenssl111-dgstfor the old behavior. - For API users: the bundled Bouncy Castle has moved from
org.bouncycastletonet.jacksum.zzadopt.org.bouncycastle, and the adopted GNU Crypto classes have moved tonet.jacksum.zzadopt.org.gnu.crypto.
Have fun with Jacksum 4, and let me know what you think!
- Download: https://github.com/jonelo/jacksum/releases
- Feature Comparison Table: https://github.com/jonelo/jacksum/wiki/Feature-Comparison-Table
-
BlueMidnightWish-[224,256,384,512], CubeHash-[224,256,384,512], Hamsi-[224,256,384,512], Shabal-[192,224,256,384,512], and SIMD-[224,256,384,512] ↩
-
MD6 (md6-8 to md6-512 in steps of 8) and Edon-R-[224,256,384,512] ↩
-
Romulus-H is one of the finalists of the NIST Lightweight Cryptography competition ↩
-
belt-hash is the hash function of the Belarusian national standard STB 34.101.31 ↩
-
unless the encoding has a case-sensitive alphabet, such as Base64 or Z85 ↩
-
the styles
bsd,openssl-dgst, andsolaris-digest-v↩
No comments:
Post a Comment