-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.csiden.org/r/223/
-----------------------------------------------------------
(Updated June 13, 2015, 3:32 a.m.)
Review request for OpenZFS Developer Mailing List and Saso Kiselkov.
Bugs: 4185
https://www.illumos.org/projects/illumos-gate//issues/4185
Repository: illumos-gate
Description
-------
4185 add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R
Note that this allocates new checksum algorithm values. If you have developed
new checksum algorithms on a private branch, now would be a good time to speak
up.
enum zio_checksum {
...
ZIO_CHECKSUM_NOPARITY, // == 10, last one in illumos
ZIO_CHECKSUM_SHA512, // == 11, proposed addition
ZIO_CHECKSUM_SKEIN, // == 12, proposed addition
ZIO_CHECKSUM_EDONR, // == 13, proposed addition
}
Note that this doesn't change any defaults, e.g. "zfs set dedup=on" still
changes the checksum algorithm to sha256. You need to explicitly opt in to use
the new checksum algorithms. We'll probably eventually change that default for
dedup=on to sha512. (This is the same strategy we used with checksum=on and
lz4.)
Summary from the zpool-features manpage:
sha512
This feature enables the use of the SHA-512/256 truncated hash
algorithm (FIPS 180-4) for checksum and dedup. The native 64-bit
arithemtic of SHA-512 provides an approximate 50% performance boost
over SHA-256 on 64-bit hardware and is thus a good minimum-change
replacement candidate for systems where hash performance is
important, but these systems cannot for whatever reason utilize the
faster skein and edonr algorithms.
Booting off of pools utilizing SHA-512/256 is supported (provided
that the updated GRUB stage2 module is installed).
skein
This feature enables the use of the Skein hash algorithm for
checksum and dedup. Skein is a high-performance secure hash
algorithm that was a finalist in the NIST SHA-3 competition. It
provides a very high security margin and high performance on 64-bit
hardware (80% faster than SHA-256). This implementation also
utilizes the new salted checksumming functionality in ZFS, which
means that the checksum is pre-seeded with a secret 256-bit random
key (stored on the pool) before being fed the data block to be
checksummed. Thus the produced checksums are unique to a given
pool, preventing hash collision attacks on systems with dedup.
edonr
This feature enables the use of the Edon-R hash algorithm for
checksum, including for nopwrite (if compression is also enabled,
an overwrite of a block whose checksum matches the data being
written will be ignored). In an abundance of caution, Edon-R can
not be used with dedup (without verification).
Edon-R is a very high-performance hash algorithm that was part of
the NIST SHA-3 competition. It provides extremely high hash
performance (over 350% faster than SHA-256), but was not selected
because of its unsuitability as a general purpose secure hash
algorithm. This implementation utilizes the new salted
checksumming functionality in ZFS, which means that the checksum is
pre-seeded with a secret 256-bit random key (stored on the pool)
before being fed the data block to be checksummed. Thus the
produced checksums are unique to a given pool, blocking hash
collision attacks on systems with dedup.
Original author: Matthew Ahrens & Saso Kiselkov
Diffs (updated)
-----
usr/src/uts/common/crypto/io/skein_mod.c PRE-CREATION
usr/src/uts/common/Makefile.files ca912c05dd5160262ca9a55c8672e70e09269760
usr/src/test/zfs-tests/tests/functional/checksum/edonr/edonr_test.c
PRE-CREATION
usr/src/man/man5/zpool-features.5 fbefb37b80914566739620d0201183f0243e9306
usr/src/lib/libmd/sparc/Makefile 5f491cc9af95549b865cd076b12c3870bbd68c95
usr/src/common/crypto/skein/skein_iv.c PRE-CREATION
usr/src/common/crypto/skein/skein_impl.h PRE-CREATION
usr/src/common/crypto/skein/skein.c PRE-CREATION
usr/src/uts/sparc/zfs/Makefile b891e4fae1f2e2c8505dfa96f0097580b146299e
usr/src/uts/sparc/skein/Makefile PRE-CREATION
usr/src/uts/sparc/edonr/Makefile PRE-CREATION
usr/src/uts/sparc/Makefile.sparc e0913ce81fa9e9e28c5b9022a87210aeaf4f3add
usr/src/uts/intel/zfs/Makefile be0f82115c88339e1fb8e0f7d96f5d5a7f917450
usr/src/uts/intel/skein/Makefile PRE-CREATION
usr/src/uts/intel/edonr/Makefile PRE-CREATION
usr/src/uts/intel/Makefile.intel bd346b5dab4be7be27e14ada63405843eaa6a885
usr/src/uts/common/sys/skein.h PRE-CREATION
usr/src/uts/common/sys/sha2.h ad46dd683ad54b0169130a70856d879c7840cc57
usr/src/uts/common/sys/edonr.h PRE-CREATION
usr/src/uts/common/sys/debug.h 27b84beb88071639fca78fca30cbba305dd3c4ac
usr/src/uts/common/sys/crypto/common.h
8fc7b05de6289f87de1670bf0a6def5b1e84f423
usr/src/uts/common/sys/Makefile c99ef8accbb80c34d48393d0d057ebc57ad85d78
usr/src/uts/common/fs/zfs/zio_checksum.c
d1c60c3ffaba0521477f3b0709e079d33bb8a9cc
usr/src/uts/common/fs/zfs/zio.c aa0f2945dd948158a1ea8a0f72558b7f892a1017
usr/src/uts/common/fs/zfs/zfs_ioctl.c
1826c8aaacdf7acdc5ec66cab491407ef2f914cf
usr/src/uts/common/fs/zfs/sys/zio_checksum.h
a921a2f1396ed720d563a0e16822283276495f0f
usr/src/uts/common/fs/zfs/sys/zio.h 198dc92387092fdbcbf2716da21444b9bdde1bec
usr/src/uts/common/fs/zfs/sys/spa_impl.h
56e6adb713d201ade02ca665008e806c88b66dd3
usr/src/uts/common/fs/zfs/sys/spa.h 2c4887b6ca5040d39b46c6f6be531607946a5e10
usr/src/uts/common/fs/zfs/sys/dmu.h 9864129e18c0d6ed5ef3b4ec05f8b63628736ed3
usr/src/uts/common/fs/zfs/spa_misc.c c5af055a8608745ec5099a4f4ebf4a159767d0b4
usr/src/uts/common/fs/zfs/spa.c e9d2432a81791e75ad2f8b41fe99c9da9d345454
usr/src/uts/common/fs/zfs/skein_zfs.c PRE-CREATION
usr/src/uts/common/fs/zfs/sha256.c f515be6bb30425ed89ccb070bb913337c886c71c
usr/src/uts/common/fs/zfs/edonr_zfs.c PRE-CREATION
usr/src/uts/common/fs/zfs/dsl_dataset.c
a11926b58f1a6741b53216509ad00df37d0a1ac8
usr/src/uts/common/fs/zfs/dmu_send.c 7d728c6877e58c0452ad0e4e7ea0eedc9dfbbaf7
usr/src/uts/common/fs/zfs/dmu.c 43bcfee91cd1308447ba739449355a0d7730441c
usr/src/uts/common/fs/zfs/ddt.c 7d938965722a143af64d287de9bfdd6e5c8d922c
usr/src/uts/common/fs/zfs/arc.c 09d2e1dd8fdf6648d863d4c036c16b3f7981dbf5
usr/src/uts/common/crypto/io/edonr_mod.c PRE-CREATION
usr/src/uts/common/Makefile.rules c5e728fdffcb35ad73813a5ee2c3f0050b4fb92f
usr/src/test/zfs-tests/tests/functional/checksum/skein/sparcv9/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/skein/sparc/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/skein/skein_test.c
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/skein/i386/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/skein/amd64/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/skein/Makefile PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/sha2/sparcv9/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/sha2/sparc/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/sha2/sha2_test.c
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/sha2/i386/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/sha2/amd64/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/sha2/Makefile PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/run_skein_test.ksh
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/run_sha2_test.ksh
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/run_edonr_test.ksh
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/edonr/sparcv9/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/edonr/sparc/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/edonr/i386/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/edonr/amd64/Makefile
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/edonr/Makefile PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/Makefile.subdirs
PRE-CREATION
usr/src/test/zfs-tests/tests/functional/checksum/Makefile PRE-CREATION
usr/src/test/zfs-tests/tests/functional/Makefile
65838aba43852c2c1e376675d4f45fabebc59433
usr/src/test/zfs-tests/runfiles/openindiana.run
8908515500bb649ae123090d4a32fc8f587f7408
usr/src/test/zfs-tests/runfiles/omnios.run
8908515500bb649ae123090d4a32fc8f587f7408
usr/src/test/zfs-tests/runfiles/delphix.run
c98ed9f88885ef6763cab58371f485078a0eb556
usr/src/test/zfs-tests/include/libtest.shlib
7c25516d5171e1d48d29207c4a0c7f0c3a9c2e45
usr/src/pkg/manifests/system-test-zfstest.mf
dab3f35c906b2295eb505a3fa3477fa208cb66cc
usr/src/pkg/manifests/system-kernel.mf
4832229cb2f292e65937c01214b1bba231e91113
usr/src/pkg/manifests/system-header.mf
eba786e9d07490c330eabeadcaf82eee9b365222
usr/src/man/man1m/zfs.1m 752074bd4fe384512cc85262572e8837c15c17ca
usr/src/lib/libzfs/common/libzfs_dataset.c
e491a65c9396fff26b5b786f3a234f076a2e6a08
usr/src/lib/libmd/sparcv9/Makefile 5dd3f2eac36c5381fe651a2a795eb1be48d28602
usr/src/lib/libmd/inc.flg 2652430b841348a4ad25ab990cf7e793ce3e5e7e
usr/src/lib/libmd/i386/Makefile 3e6fe00e17372e0666088927aec0e25ce97af556
usr/src/lib/libmd/common/skein.h PRE-CREATION
usr/src/lib/libmd/common/mapfile-vers
a70144e833e3c609b4c86c35899a4df513c5e0b2
usr/src/lib/libmd/amd64/Makefile 3872749fbbfdbde48784cd1146dee0fe52fba043
usr/src/lib/libmd/Makefile.targ 58ec7b30e50d235741b59e2cf9a76300976ada7d
usr/src/lib/libmd/Makefile.com af8cac390bca3421c0f9535c8e9ebf18a75a51e8
usr/src/lib/libmd/Makefile ddd89d7382bf7d393536904088790d2204ccf329
usr/src/grub/grub-0.97/stage2/zfs_sha256.c
393eaee05b42e535de8eb6041f19c377bdc15478
usr/src/grub/grub-0.97/stage2/zfs-include/zio.h
3b893f451ef0d6d882e477860d816c6f287ad172
usr/src/grub/grub-0.97/stage2/fsys_zfs.c
91b4bcec6fb4119c462f71dffb6b16475e5f4180
usr/src/grub/grub-0.97/stage2/fsys_zfs.h
2f77a5b6a71a984e2c8b56a5a9e62ab8472e9340
usr/src/grub/capability 111cd61ccb550faf17842be4bf3dadd01dc5f1ae
usr/src/common/zfs/zfs_prop.c e145b1c866e32ab21be324b8ebc717f1571a104a
usr/src/common/zfs/zfs_fletcher.c fa43ce6bdb5dd1d625896fe73d0cbd84d2631d69
usr/src/common/zfs/zfs_fletcher.h b49df0cf4f0fd2d613d9da1a1d93a68ab19dbb1a
usr/src/common/zfs/zfeature_common.c 3358e5eb87bada47b77d4060b88a614e116d9b7a
usr/src/common/zfs/zfeature_common.h 3f54b392be4248ea059a9d0b06ee1df756495d34
usr/src/common/crypto/skein/skein_port.h PRE-CREATION
usr/src/common/crypto/skein/skein_block.c PRE-CREATION
usr/src/common/crypto/skein/THIRDPARTYLICENSE.descrip PRE-CREATION
usr/src/common/crypto/skein/THIRDPARTYLICENSE PRE-CREATION
usr/src/common/crypto/sha2/sha2.c 1a2603ccf00cf933e20d75f427fa4d2e6c63551b
usr/src/common/crypto/edonr/edonr_byteorder.h PRE-CREATION
usr/src/common/crypto/edonr/edonr.c PRE-CREATION
Diff: https://reviews.csiden.org/r/223/diff/
Testing
-------
ztest, zfs test suite
(note that ztest uses the new algorithms)
http://jenkins.delphix.com/job/zfs-precommit/2447/
Thanks,
Matthew Ahrens
_______________________________________________
developer mailing list
[email protected]
http://lists.open-zfs.org/mailman/listinfo/developer