1

From what I understand, hash functions are one-way functions. Let's say that I want to publish an opinion article anonymously, but there is a possibility that I later want to prove that I was the one that wrote the article. Is it possible for me to simply put my identifying information, such as my name, birthday, and social security number, into a cryptographic hash function, and place that hash as my "pseudonym"? The question is the same question as Deniable proof of authorship, but I don't understand the answer, and I'm not sure if the answer pertains to the use of a hash function.

If this works, are there any downsides? Are there common mistakes that people like me make? I don't see a way to break this function other than to enter the identifying information of every single person in the world and see if it matches the pseudonym.

  • 1
    World population is about 7 billion. Someone with a database of all names and birthdays can brute force that in a few hours/days. Additionally, you can probably eliminate most of the people in that list, based on language proficiency, country of residence, etc and still have a reasonably good chance of undoing your hash. You'd likely want to add salt to the hashed text and stretch your hash by using an iterative hashing like PBKDF2 or bcrypt. – Lie Ryan Oct 14 at 10:52
  • However, the root of the problem isn't just that people can undo your hash, but rather that the attached hash only proves that the author of the document claims to be you, but there's nothing preventing someone else from making a document that claims to be you and then hashing that so that they can later misattribute you as the author of the document. – Lie Ryan Oct 14 at 11:02
  • @LieRyan Where are you getting this from? Using a cryptographically secure hash function ensures that there is an extremely low chance of collision. Your use of the term undo here is misleading, what you mean to say is there is a chance for an attacker to use rainbow tables (dictionary attack) to compare hashes with a known value, until the hash being checked matches. We can further minimise this by adding randomness (a nonce, possibly also a salt) to the message and then hash this. Importantly, hashes do not provide identity, but rather that the message has not be altered. – rshah Oct 14 at 13:17
  • @rshah: First, rainbow table and dictionary attack are very different attacks, and I'm not talking about them. Also, it doesn't matter that the cryptographic hash has very low chance of collision, the problem is that the input domain is too small. As an extreme example, if there's only two possible input values "true" and "false", it doesn't matter that you use strong hash functions like SHA512 (or other hash function you fancy), because exhaustively brute forcing all inputs: [SHA512("true"), SHA512("false")] can be done faster than you can blink your eye anyway. – Lie Ryan Oct 14 at 13:25
  • Very true, my misclarification. However, what it seems as the suggestion implies is that we will hash whether or not the document belongs to someone (i.e. true if the document does in fact belong to the author). The use of hashes and the discussion still fails to address the fact that the OP discusses anonymity, where authenticating that the article was in fact written by them reveals their identity. See my answer. – rshah Oct 14 at 13:36
1

One way that strikes me is simply generating a new PGP/GPG key, with an obviously bogus e-mail, such as example@example.com. Sign the work you publish, and make sure the signature is published together with the work.

If you at some later date need to verify that you wrote it, simply dig up the private and public key that made the signature. This can be used to prove that you had knowledge of and access to the work before it was published.

As long as you do not connect the keys with yourself in any way, no thirdparty can connect the work to you.

You need to keep the key material in the intervening period of course.

1

Short answer: no

This is not the purpose of a hash, you would want to use a digital signature for this purpose instead. Would there be a difference in posting your personal information vs. posting a hash of your personal information? In order for someone to verify that the hash is indeed of your personal information, they would need that information. How can someone verify you were the one who hashed your personal information? I could do that as well.

In information security, there is a concept called CIA(A) which stands for Confidentiality, Integrity, Availability and Authenticity. Certain cryptographic concepts provide a subset of these (let's leave out availability for now).

Encryption:

  • Confidentiality: true, Integrity: false, Authenticity: false

Hashing:

  • Confidentiality: n/a, Integrity: true, Authenticity: false

MACs (Message Authentication Codes):

  • Confidentiality: n/a, Integrity: true, Authenticity: true

Digital Signatures (Public Key Cryptography):

  • Confidentiality: n/a, Integrity: true, Authenticity: true

Hashes only provide integrity of the message (assuming you're presenting the hash in a secured way). By hashing your personal information, the only claim that can be made is, "hey, my personal information hasn't been altered." By hashing the message, the only claim you can make, is "hey, this message hasn't been altered."

If you wanted authenticity and non-repudiation that you created that article, you can generate a public/private key pair, then use your private key to sign the message. Now that it's signed, you can post the signature with your public key (assuming this is presented securely). Anyone can verify using the public key, that the message came from you. No one else could possibly imitate a signature because you are the only one with the private key.

This actually brings about a stricter security principle called non-repudiation. This means not only can you prove that you've signed that message, you also can't deny signing that message.

1

While the other answers discuss security properties, one mentions hash functions and states how these are used for message integrity (i.e. HMAC, etc.).

Another answer points to the use of digital signatures. A digital signature is a method for verifying the authenticity of a message, or article in this case. For your case in the question, to use digital signatures, the anonymous author would have to sign the article with their private key such that we can verify the document has not been tampered with (integrity) and was in fact produced by the author (authentication) using their public key.

There are problems here. First, the author may remain anonymous using a public key associated with some pseudonym, for example, the question here still pertains to identity. It is important to note that pseudonymity is not anonymity, and using a pseudonym in fact still ultimately maps to some identity. In this case, you want others to verify it was actually you, which means that you must provide your identity. This defeats the entire purpose of publishing an anonymous article.

So, to answer your question.. no, not without revealing your identity in the end case.

0

You can use the bitcoin blockchain to serve as your witness.

Before publishing the article, prepend a 'cover page' to the document with your name and any other identifying information. Then, take a hash of this document, and store the hash in a bitcoin transaction (specifically, in the op_return field of a transaction).

Then, later if you want to prove that it was you that wrote the article, simply publish the document (with the cover page), and reference the hash of the document in the blockchain.

Because it's virtually impossible for anyone to alter blocks more than a few levels deep in the blockchain, this proves that the document existed with the cover page as of the date of the transaction. Furthermore, if necessary, you can prove that you are in possession of the key used to sign the transaction, by creating another transaction using the same signing key.

This is essentially the functionality behind proofofexistence.com, stampery.com, opentimestamps.org, etc.

-1

Hash is perfectly usable here with a different approach.

Imagine you have the text. Put your name (or other information you see fit) at the end of the text and hash the whole thing. Then publish the text WITHOUT your name, but WITH the hash.

When you need to prove authorship - just publish the text with your name that hashes to the originally published hash.

If you don't want someone to brute-force a small set of the possible authors, just add some additional random characters after your name (you will have to publish them for the proof, so make sure you save them).

  • "make sure you save them" Can confirm, I did not properly take care of this and lost some of my authorship proofs. A password manager or a gpg-encrypted file (in the same folder as you keep other important files) might be suitable places for this. – Luc Oct 14 at 13:18
  • 1
    You can use a hash on the article, alongside with your public name, to ensure that the document is coming from you and has not been tampered with. The hash only provides integrity. You don't answer the question here, as the OP describes using an originally anonymous article. By putting your identity out there with the hash initially means that the article is not anonymous, and the fact that you; for example; provide an email and name alongside your hash means nothing. Instead you would use asymmetric encryption to provide integrity and authentication. – rshah Oct 14 at 13:20
  • The hash here provides everything you can acheive with cryptography alone. – fraxinus Oct 14 at 14:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.