I think policy makers do not understand how easy encryption is to use. I'm sending this letter to help them understand a little better why this bill makes no sense and will not prevent criminals nor terrorists from hiding data if they want to.
Dear Senator,
I am writing today to explain how a draft bill, the Compliance with Court Orders Act of 2017, will affect me.
For the last 7 years I have been developing a data backup program, HashBackup. HashBackup allows people to securely backup their computer data to cloud storage, without worrying about the storage company or one of its employees accessing confidential data through the use of strong encryption.
There are many reasons for maintaining strict confidentiality:
- financial records
- medical records
- company trade secrets
- top secret intelligence
- general privacy protection
- and yes, committing crimes
The purpose of this bill as I understand it is to compel any person or company who provides software or devices that can create unintelligible (encrypted) data, to assist the goverment in producing the original, unencrypted data, with a court order.
The critical piece of information to have in order to produce the original data is the encryption key. Without that, no one in the world can produce the original data, whether they wrote the software or not. So this bill's ultimate purpose is to compel individuals and companies selling encryption products to use subversive technical means to obtain encryption keys from its customers, presumably without the customers' knowledge.
My backup program, HashBackup, creates keys on each customer's computer. The customer is responsible for their key, just like the lock on their front door. Similar to a lock manufacturer, I do not know or have access to any customers' encryption keys. If the customer loses their key, they lose their backup, and there is nothing I can do to help them recover it.
If my customer uses HashBackup to store their data at Amazon or Google, and the government decides they want that data, I am the one who will get a court order to provide it since I wrote the software that encrypted it. The only way I could possibly comply with the order is to install special "backdoor" code in HashBackup that relayed the customer's key to the government. If customers realize that their encrypted backup data is not really secure and private, I will be out of business.
Our government presents this issue as a way for law enforcement to prosecute crime and prevent terrorism. But as we all know, criminals and terrorist do not obey laws; the laws end up only affecting the law-abiding. If this law is passed, criminals will be unaffected, as they can easily encrypt their own data and hide their keys.
Some people may believe that encryption is a complex technology that only big companies like Apple can use. It is not. Encryption is a simple technology that anyone can use. It doesn't require any special computer skills, training, or equipment. Criminals and terrorists will continue to use simple encryption after this law is passed.
To show how easy it is to encrypt and decrypt messages, here are two very simple programs to encrypt and decrypt messages. These are written in the Python computer language, but similarly simple programs can be written in most modern computer languages.
The first example program encrypts a message. The lines beginning with # are comments to explain what the program is doing:
import binascii
import AES
import os
# create a key and display it
key = os.urandom(16)
print 'Key:', binascii.hexlify(key)
# here's the message to protect;
# add spaces until it a multiple of 16 letters
message = 'this is a secret'
# encrypt and display the same message 3 times
for i in range(3):
iv = os.urandom(16)
encrypted = AES.new(key, AES.MODE_CBC, iv).encrypt(message)
print 'Encrypted message:', binascii.hexlify(iv + encrypted)
The next example program decrypts an encrypted message and display the original secret message:
import binascii
import AES
import os
import sys
# get the key and encrypted message
key = binascii.unhexlify(sys.argv[1])
encrypted = binascii.unhexlify(sys.argv[2])
# separate the iv
iv = encrypted[:16]
encrypted = encrypted[16:]
# decrypt and display the original message
print 'Original message:', AES.new(key, AES.MODE_CBC, iv).decrypt(encrypted)
Now we show the encryption program creating 3 completely different encryptions of the same secret message, all using the same key:
[jim@mb ~]$ py easy1.py
Key: 9cba06caad965229457652b3ae760595
Encrypted message: 4c77810f6f39946a2e525b2ef0e2fe6ed70201d22bb263734dd3aebbbf11af0d
Encrypted message: d262cca8d9da4aa01c36be5dcf2809d212348438752ffea491a13dacd2999ba9
Encrypted message: 0749d160d9e751a67bb908ba8df7800a177e53ea03fad3694bbeab54cd680469
Here is the decryption program changing all 3 encrypted messages back to the original message:
[jim@mb ~]$ py easy2.py 9cba06caad965229457652b3ae760595 4c77810f6f39946a2e525b2ef0e2fe6ed70201d22bb263734dd3aebbbf11af0d
Original message: this is a secret
[jim@mb ~]$ py easy2.py 9cba06caad965229457652b3ae760595 d262cca8d9da4aa01c36be5dcf2809d212348438752ffea491a13dacd2999ba9
Original message: this is a secret
[jim@mb ~]$ py easy2.py 9cba06caad965229457652b3ae760595 0749d160d9e751a67bb908ba8df7800a177e53ea03fad3694bbeab54cd680469
Original message: this is a secret
An interesting fact you may not realize: one key can be used to encrypt the same message in many different ways. These simple programs above can encrypt the same message, using the same key, 340,282,366,920,938,463,463,374,607,431,768,211,456 different ways.
No matter what laws our government passes, criminals will not obey them. If a criminal wants to keep something secret using technology, it is not hard: all they have to do is privately share a key with someone, then send encrypted message like the above.
An important point is that these encrypted messages can be sent over ANY communication medium. Whether the government has access to them or not, they cannot be decoded without the key. Criminals can encrypt GPS coordinates and times for example, send them as a simple text message, and the government, Apple, nor anyone else would be able to see the original message.
I have no problem with law enforcement doing an authorized search to obtain a suspected criminal's encryption key(s) FROM THE SUSPECT. But as a producer of software, I should not be compelled to violate my customers' trust by stealing their key without their knowledge. Then I become the criminal.
Please do not pass this bill. It will not affect criminals or terrorists - just the rest of us law-abiding citizens.
Thank you,
Jim Wilcoxson