<p>The source code (<a href="https://github.com/etotheipi/BitcoinArmory/blob/master/qtdialogs.py" rel="nofollow noreferrer">qtdialogs.py</a>) has this to say about SecurePrint:</p>
<pre><code>  # USE PRINTER MASK TO PREVENT NETWORK DEVICES FROM SEEING PRIVATE KEYS
  # Hardcode salt &amp; IV because they should *never* change.
  # Rainbow tables aren't all that useful here because the user
  # is not creating the password -- it's *essentially* randomized
  # with 64-bits of real entropy. (though, it is deterministic
  # based on the private key, so that printing the backup multiple
  # times will produce the same password).
</code></pre>
<p>So it is 64-bit, or ~10^19 combinations. Armory uses a scrypt-based <a href="https://datatracker.ietf.org/doc/html/draft-josefsson-scrypt-kdf-01#section-4" rel="nofollow noreferrer">key derivation function</a> for the SecurePrint code. It takes a noticeable amount of time (not long at all, but not seemingly instant) on my computer to calculate the wallet keys/ID from the SecurePrint code. Let's say an attacker has your printout, and it takes 0.1 seconds per attempt. He would need about <strong>58 billion CPU years</strong> to find the right private key by guessing the SecurePrint code. So yes, it would appear that it is secure enough to disperse paper backups, as long as you're not going to have an extremely valuable (e.g. billions of dollars) wallet.</p>
<p>You might consider whether scrypt ASICs (which will come in some form, unless Litecoin and its kin die off) can attack your key as well. I wouldn't expect it to be faster by a factor of 500 billion (which would put the time down near a month), but if you consider this to be a &quot;lifetime wallet&quot;, you might not want to have this as a potential weakest link.</p>
<p><strong>Warning</strong>: I'm not an expert in Armory, just some guy who took a look at the code and knows a bit about cryptography. If you decide to post your SecurePrint-secured paper wallet all over the Internet and someone steals your bitcoins, don't come crying to me.</p>

CC BY-SA 3.0
2014-05-31T00:21:01.627Z
2014-05-31T00:51:42.650Z
2021-10-07T07:18:56.873Z
Tim S.
<p>Armory gives the option of Secure Print for making paper backups. I understand that the developers give this option in case your printer stores a cache, or if the wallet could otherwise be compromised in transit from your computer to your printer. In other words, it is not intended as an encrypted paper backup, but just as a feature to help securely print your paper wallet.</p>

<p>My question is, even though this feature was not <em>intended</em> to make an encrypted paper backup, is it secure enough to enable one to widely disperse paper backups, assuming  only the actual wallet owner controls the generated password (which I think is around 10 characters)? What type of encryption cipher does it use?</p>

<encryption><armory><paper-wallet>
How secure is Secure Print?
DJG
# How secure is Secure Print?

(Asked by: username_0 on 2014-05-30)

Armory gives the option of Secure Print for making paper backups. I understand that the developers give this option in case your printer stores a cache, or if the wallet could otherwise be compromised in transit from your computer to your printer. In other words, it is not intended as an encrypted paper backup, but just as a feature to help securely print your paper wallet.

My question is, even though this feature was not *intended* to make an encrypted paper backup, is it secure enough to enable one to widely disperse paper backups, assuming only the actual wallet owner controls the generated password (which I think is around 10 characters)? What type of encryption cipher does it use?

**Tags:** encryption, armory, paper-wallet


---

## 1 answers

### Answer by username_1 on 2014-05-31. Score: 2 | Accepted answer

The source code ([qtdialogs.py](https://github.com/etotheipi/BitcoinArmory/blob/master/qtdialogs.py)) has this to say about SecurePrint:

```
  # USE PRINTER MASK TO PREVENT NETWORK DEVICES FROM SEEING PRIVATE KEYS
  # Hardcode salt & IV because they should *never* change.
  # Rainbow tables aren't all that useful here because the user
  # is not creating the password -- it's *essentially* randomized
  # with 64-bits of real entropy. (though, it is deterministic
  # based on the private key, so that printing the backup multiple
  # times will produce the same password).

```

So it is 64-bit, or ~10^19 combinations. Armory uses a scrypt-based [key derivation function](https://datatracker.ietf.org/doc/html/draft-josefsson-scrypt-kdf-01#section-4) for the SecurePrint code. It takes a noticeable amount of time (not long at all, but not seemingly instant) on my computer to calculate the wallet keys/ID from the SecurePrint code. Let's say an attacker has your printout, and it takes 0.1 seconds per attempt. He would need about **58 billion CPU years** to find the right private key by guessing the SecurePrint code. So yes, it would appear that it is secure enough to disperse paper backups, as long as you're not going to have an extremely valuable (e.g. billions of dollars) wallet.

You might consider whether scrypt ASICs (which will come in some form, unless Litecoin and its kin die off) can attack your key as well. I wouldn't expect it to be faster by a factor of 500 billion (which would put the time down near a month), but if you consider this to be a "lifetime wallet", you might not want to have this as a potential weakest link.

**Warning**: I'm not an expert in Armory, just some guy who took a look at the code and knows a bit about cryptography. If you decide to post your SecurePrint-secured paper wallet all over the Internet and someone steals your bitcoins, don't come crying to me.


---

