Hacker News new | ask | show | jobs
by hkopp 1372 days ago
Note that hashquines, i.e., programs that print their own hash when executed do not depend on the hash function being broken. In fact, they are a fun little exercise.
2 comments

    #!/bin/sh
    md5sum $0
I have no idea where to even begin if the digest does not leak something about the data
The same way as a normal quine:

  $ cat >a.py
  #! /bin/python
  import hashlib
  s='#! /bin/python\nimport hashlib\ns=%r\nprint hashlib.sha512(s%%s).hexdigest()\n'
  print hashlib.sha512(s%s).hexdigest()
  $ python a.py
  cf1daf466a7a95b245eab685b808fb861dab9af26078250a8041c4c08a8ff384 (edit: wrap)
  7f7d1853f9d62d6b40cc53d0c5be3efd80eb09f57b71250910c0d6157b73fcd3
  $ sha512sum a.py
  cf1daf466a7a95b245eab685b808fb861dab9af26078250a8041c4c08a8ff384 (edit: wrap)
  7f7d1853f9d62d6b40cc53d0c5be3efd80eb09f57b71250910c0d6157b73fcd3  a.py
Oh duh. That's a clever trick which is rather obvious in hindsight.
Any cryptographic digest is not supposed to leak anything about the data that went in. That’s a core property.

In this case the hash doesn’t depend on the data at all. Do you see how that helps?

  #!/bin/sh
  HASH=6ce1c11751e405291eac368af96de90f
  # Increment until hash of this file equals $HASH: 1
  echo $HASH