On Thu, Jan 13, 2022 at 11:24:10AM +0800, Sandy Harris wrote: > Jason A. Donenfeld <Jason@xxxxxxxxx> wrote: > > > There are currently two remaining users of SHA-1 left in the kernel: bpf > > tag generation, and ipv6 address calculation. > > I think there are three, since drivers/char/random.c also uses it. This was changed as of commit 9f9eff85a008 ("random: use BLAKE2s instead of SHA1 in extraction"), which just landed in Linus's tree. > Moreover, there's some inefficiency there (or was last time I > looked) since it produces a 160-bit hash then folds it in half > to give an 80-bit output. This dates back to very early days of the /dev/random driver, back when all that was known about SHA-1 was that it was designed by the NSA using classified design principles, and it had not yet been as well studied outside of the halls of the NSA. So folding the SHA-1 hash in half was done deliberately, since at the time, performance was *not* the primary goal; security was. (This was also back in the days when encryption algorithms would run you into export control difficulties, since this is around the times when the source code of PGP was being published in an OCR font with a barcode containing the checksum of the content of every single page was being published by the MIT press, and we were publishing Kerberos with all of the *calls* to the crypto stripped out and calling it "Bones" since there were assertions that code that *called* cryptographic algoriothms might be subject to export control, even if it didn't have any crypto algorithms in the program themselves. This is also why HMAC-based constructions were so popular. People seem to forget how much things have changed since the late 1980's....) - Ted