1 | .. -*- coding: utf-8-with-signature -*- |
---|
2 | |
---|
3 | ======================================================= |
---|
4 | Things To Be Careful About As We Venture Boldly Forth |
---|
5 | ======================================================= |
---|
6 | |
---|
7 | See also :doc:`known_issues`. |
---|
8 | |
---|
9 | Timing Attacks |
---|
10 | ============== |
---|
11 | |
---|
12 | Asymmetric-key cryptography operations are particularly sensitive to |
---|
13 | side-channel attacks. Unless the library is carefully hardened against timing |
---|
14 | attacks, it is dangerous to allow an attacker to measure how long signature |
---|
15 | and pubkey-derivation operations take. With enough samples, the attacker can |
---|
16 | deduce the private signing key from these measurements. (Note that |
---|
17 | verification operations are only sensitive if the verifying key is secret, |
---|
18 | which is not the case for anything in Tahoe). |
---|
19 | |
---|
20 | We currently use private-key operations in mutable-file writes, and |
---|
21 | anticipate using them in signed-introducer announcements and accounting |
---|
22 | setup. |
---|
23 | |
---|
24 | Mutable-file writes can reveal timing information to the attacker because the |
---|
25 | signature operation takes place in the middle of a read-modify-write cycle. |
---|
26 | Modifying a directory requires downloading the old contents of the mutable |
---|
27 | file, modifying the contents, signing the new contents, then uploading the |
---|
28 | new contents. By observing the elapsed time between the receipt of the last |
---|
29 | packet for the download, and the emission of the first packet of the upload, |
---|
30 | the attacker will learn information about how long the signature took. The |
---|
31 | attacker might ensure that they run one of the servers, and delay responding |
---|
32 | to the download request so that their packet is the last one needed by the |
---|
33 | client. They might also manage to be the first server to which a new upload |
---|
34 | packet is sent. This attack gives the adversary timing information about one |
---|
35 | signature operation per mutable-file write. Note that the UCWE |
---|
36 | automatic-retry response (used by default in directory modification code) can |
---|
37 | cause multiple mutable-file read-modify-write cycles per user-triggered |
---|
38 | operation, giving the adversary a slightly higher multiplier. |
---|
39 | |
---|
40 | The signed-introducer announcement involves a signature made as the client |
---|
41 | node is booting, before the first connection is established to the |
---|
42 | Introducer. This might reveal timing information if any information is |
---|
43 | revealed about the client's exact boot time: the signature operation starts a |
---|
44 | fixed number of cycles after node startup, and the first packet to the |
---|
45 | Introducer is sent a fixed number of cycles after the signature is made. An |
---|
46 | adversary who can compare the node boot time against the transmission time of |
---|
47 | the first packet will learn information about the signature operation, one |
---|
48 | measurement per reboot. We currently do not provide boot-time information in |
---|
49 | Introducer messages or other client-to-server data. |
---|
50 | |
---|
51 | In general, we are not worried about these leakages, because timing-channel |
---|
52 | attacks typically require thousands or millions of measurements to detect the |
---|
53 | (presumably) small timing variations exposed by our asymmetric crypto |
---|
54 | operations, which would require thousands of mutable-file writes or thousands |
---|
55 | of reboots to be of use to the adversary. However, future authors should take |
---|
56 | care to not make changes that could provide additional information to |
---|
57 | attackers. |
---|