Hash-Based Signatures I Hash Functions and One-Time Signatures

Hash-Based Signatures I Hash Functions and One-Time Signatures

Hash-based signatures I Hash functions and one-time signatures Daniel J. Bernstein12 and Tanja Lange3 1University of Illinois at Chicago 2Ruhr University Bochum 3Eindhoven University of Technology 14 May 2021 Python snippets for this talk: https://cr.yp.to/talks/2021.05.14/ots-20210514.tar.gz echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ echo world | sha256sum e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317 - $ echo this is a longer message | sha256sum c316678498bdf2a77d64e1f3af0cdc6e943234d19ce38034e24ccf98a5ab5901 - $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ The sha256sum program computes the SHA-256 hash function. This is a function H : f0; 1g∗ ! f0; 1g256. Each output is 32 bytes. (Actually, SHA-256 requires input to be at most 264 − 1 bits. Exercise: Compute # years for today's fastest CPU to reach this limit.) The SHA-256 cryptographic hash function $ echo hello hello $ Daniel J. Bernstein & Tanja Lange Hash-based signatures I 2 echo world | sha256sum e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317 - $ echo this is a longer message | sha256sum c316678498bdf2a77d64e1f3af0cdc6e943234d19ce38034e24ccf98a5ab5901 - $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ The sha256sum program computes the SHA-256 hash function. This is a function H : f0; 1g∗ ! f0; 1g256. Each output is 32 bytes. (Actually, SHA-256 requires input to be at most 264 − 1 bits. Exercise: Compute # years for today's fastest CPU to reach this limit.) The SHA-256 cryptographic hash function $ echo hello hello $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ Daniel J. Bernstein & Tanja Lange Hash-based signatures I 2 echo this is a longer message | sha256sum c316678498bdf2a77d64e1f3af0cdc6e943234d19ce38034e24ccf98a5ab5901 - $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ The sha256sum program computes the SHA-256 hash function. This is a function H : f0; 1g∗ ! f0; 1g256. Each output is 32 bytes. (Actually, SHA-256 requires input to be at most 264 − 1 bits. Exercise: Compute # years for today's fastest CPU to reach this limit.) The SHA-256 cryptographic hash function $ echo hello hello $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ echo world | sha256sum e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317 - $ Daniel J. Bernstein & Tanja Lange Hash-based signatures I 2 echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ The sha256sum program computes the SHA-256 hash function. This is a function H : f0; 1g∗ ! f0; 1g256. Each output is 32 bytes. (Actually, SHA-256 requires input to be at most 264 − 1 bits. Exercise: Compute # years for today's fastest CPU to reach this limit.) The SHA-256 cryptographic hash function $ echo hello hello $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ echo world | sha256sum e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317 - $ echo this is a longer message | sha256sum c316678498bdf2a77d64e1f3af0cdc6e943234d19ce38034e24ccf98a5ab5901 - $ Daniel J. Bernstein & Tanja Lange Hash-based signatures I 2 The sha256sum program computes the SHA-256 hash function. This is a function H : f0; 1g∗ ! f0; 1g256. Each output is 32 bytes. (Actually, SHA-256 requires input to be at most 264 − 1 bits. Exercise: Compute # years for today's fastest CPU to reach this limit.) The SHA-256 cryptographic hash function $ echo hello hello $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ echo world | sha256sum e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317 - $ echo this is a longer message | sha256sum c316678498bdf2a77d64e1f3af0cdc6e943234d19ce38034e24ccf98a5ab5901 - $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ Daniel J. Bernstein & Tanja Lange Hash-based signatures I 2 (Actually, SHA-256 requires input to be at most 264 − 1 bits. Exercise: Compute # years for today's fastest CPU to reach this limit.) The SHA-256 cryptographic hash function $ echo hello hello $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ echo world | sha256sum e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317 - $ echo this is a longer message | sha256sum c316678498bdf2a77d64e1f3af0cdc6e943234d19ce38034e24ccf98a5ab5901 - $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ The sha256sum program computes the SHA-256 hash function. This is a function H : f0; 1g∗ ! f0; 1g256. Each output is 32 bytes. Daniel J. Bernstein & Tanja Lange Hash-based signatures I 2 The SHA-256 cryptographic hash function $ echo hello hello $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ echo world | sha256sum e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317 - $ echo this is a longer message | sha256sum c316678498bdf2a77d64e1f3af0cdc6e943234d19ce38034e24ccf98a5ab5901 - $ echo hello | sha256sum 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - $ The sha256sum program computes the SHA-256 hash function. This is a function H : f0; 1g∗ ! f0; 1g256. Each output is 32 bytes. (Actually, SHA-256 requires input to be at most 264 − 1 bits. Exercise: Compute # years for today's fastest CPU to reach this limit.) Daniel J. Bernstein & Tanja Lange Hash-based signatures I 2 print(sha256(b'hello\n').hex()) 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 >>> print(sha256(b'hello\n'*1000000).hex()) 1a2cce61984891495b00826ef591104a34ff35766bbbcaaff965f766154812ab >>> The SHA-256 cryptographic hash function in Python 3 >>> import hashlib >>> def sha256(x): ... h = hashlib.sha256() ... h.update(x) ... return h.digest() ... >>> print(sha256(b'hello').hex()) 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 >>> Daniel J. Bernstein & Tanja Lange Hash-based signatures I 3 print(sha256(b'hello\n'*1000000).hex()) 1a2cce61984891495b00826ef591104a34ff35766bbbcaaff965f766154812ab >>> The SHA-256 cryptographic hash function in Python 3 >>> import hashlib >>> def sha256(x): ... h = hashlib.sha256() ... h.update(x) ... return h.digest() ... >>> print(sha256(b'hello').hex()) 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 >>> print(sha256(b'hello\n').hex()) 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 >>> Daniel J. Bernstein & Tanja Lange Hash-based signatures I 3 The SHA-256 cryptographic hash function in Python 3 >>> import hashlib >>> def sha256(x): ... h = hashlib.sha256() ... h.update(x) ... return h.digest() ... >>> print(sha256(b'hello').hex()) 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 >>> print(sha256(b'hello\n').hex()) 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 >>> print(sha256(b'hello\n'*1000000).hex()) 1a2cce61984891495b00826ef591104a34ff35766bbbcaaff965f766154812ab >>> Daniel J. Bernstein & Tanja Lange Hash-based signatures I 3 Goals of cryptographic hash functions What do we want from a hash function H : f0; 1g∗ ! f0; 1gn? For any string x, think of H(x) as an n-bit fingerprint of x. Goals: I H(x) looks totally random; I nobody can find two different strings x; x 0 with H(x) = H(x 0); I any tiny change from x to x 0 makes a totally new H(x 0); I nobody can compute H(x) without knowing all of x; I nobody can compute a secret x given only H(x); I ... Warning: Some hash goals are difficult to mathematically define. Daniel J. Bernstein & Tanja Lange Hash-based signatures I 4 Generic attack: Try ≈2n random choices of x. If the output of H is distributed uniformly then each x has a 1=2n chance of H(x) = y. e.g. ≈2128 tries if n = 128: very expensive. Exercise: Given y1; y2;:::; y220 , how long does it take to find x1; x2;:::; x220 such that H(x1) = y1 and H(x2) = y2 and . and H(x220 ) = y220 ? Generic hardness of preimage resistance Goal: Given y 2 H(f0; 1g∗), finding x 2 f0; 1g∗ with H(x) = y is hard. Here y is given, and is known to be the image of some x 2 f0; 1g∗. Typically there are many such x, but it should be computationally hard to find any. Daniel J. Bernstein & Tanja Lange Hash-based signatures I 5 Exercise: Given y1; y2;:::; y220 , how long does it take to find x1; x2;:::; x220 such that H(x1) = y1 and H(x2) = y2 and . and H(x220 ) = y220 ? Generic hardness of preimage resistance Goal: Given y 2 H(f0; 1g∗), finding x 2 f0; 1g∗ with H(x) = y is hard. Here y is given, and is known to be the image of some x 2 f0; 1g∗. Typically there are many such x, but it should be computationally hard to find any. Generic attack: Try ≈2n random choices of x. If the output of H is distributed uniformly then each x has a 1=2n chance of H(x) = y. e.g. ≈2128 tries if n = 128: very expensive. Daniel J. Bernstein & Tanja Lange Hash-based signatures I 5 Generic hardness of preimage resistance Goal: Given y 2 H(f0; 1g∗), finding x 2 f0; 1g∗ with H(x) = y is hard. Here y is given, and is known to be the image of some x 2 f0; 1g∗. Typically there are many such x, but it should be computationally hard to find any. Generic attack: Try ≈2n random choices of x. If the output of H is distributed uniformly then each x has a 1=2n chance of H(x) = y. e.g. ≈2128 tries if n = 128: very expensive. Exercise: Given y1; y2;:::; y220 , how long does it take to find

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    56 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us