/purb

Implementation and simulations for the "Reducing Metadata Leakage from Encrypted Data and Communication with PURBs" paper

Primary LanguageGoBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Padded Uniform Random Blobs Build Status

A library for a novel encoding approach preventing metadata leakage for encrypted communication and data at rest.

make install
make example

The folder experiments-encoding contains simulation about PURBs encoding and decoding, and the duration of those operations.

The folder experiments-padding contains an evaluation of Padmé, the padding algorithm for PURBs.

Example

Message: And presently I was driving through the drizzle of the dying day, with the windshield wipers in full action but unable to cope with my tears.

00000000  41 6e 64 20 70 72 65 73  65 6e 74 6c 79 20 49 20  |And presently I |
00000010  77 61 73 20 64 72 69 76  69 6e 67 20 74 68 72 6f  |was driving thro|
00000020  75 67 68 20 74 68 65 20  64 72 69 7a 7a 6c 65 20  |ugh the drizzle |
00000030  6f 66 20 74 68 65 20 64  79 69 6e 67 20 64 61 79  |of the dying day|
00000040  2c 20 77 69 74 68 20 74  68 65 20 77 69 6e 64 73  |, with the winds|
00000050  68 69 65 6c 64 20 77 69  70 65 72 73 20 69 6e 20  |hield wipers in |
00000060  66 75 6c 6c 20 61 63 74  69 6f 6e 20 62 75 74 20  |full action but |
00000070  75 6e 61 62 6c 65 20 74  6f 20 63 6f 70 65 20 77  |unable to cope w|
00000080  69 74 68 20 6d 79 20 74  65 61 72 73 2e           |ith my tears.|

PURB for 1 recipient, 1 suite (Curve 25519):

00000000  97 ae 12 f3 55 c4 48 2a  11 7c 7a 33 2f 86 ca 99  |....U.H*.|z3/...|
00000010  dd f6 8a 8a 92 3f 23 b9  3c 46 62 44 ce 3f ea 6c  |.....?#.<FbD.?.l|
00000020  fd e4 0c f9 36 65 60 d0  6e e7 a1 a5 bb 47 0c dc  |....6e`.n....G..|
00000030  85 4a e5 b8 17 e5 2c 43  58 ff e8 6e a0 b1 89 3d  |.J....,CX..n...=|
00000040  1c 29 8e 15 47 65 8a b2  14 c6 66 b2 63 d5 e1 c8  |.)..Ge....f.c...|
00000050  c9 9f b3 3d 86 a2 ed af  4a 44 92 8e 37 1e e8 ec  |...=....JD..7...|
00000060  ee 41 52 ca 30 7e 15 9c  cf 17 0a 18 77 6a 7c cd  |.AR.0~......wj|.|
00000070  be 86 a7 ba 7b 3e 2c ba  bd 68 86 bf 8f 45 49 cf  |....{>,..h...EI.|
00000080  36 b7 dd 5f 12 20 77 bf  79 4f d5 b0 18 ee d2 26  |6.._. w.yO.....&|
00000090  a9 be 97 3c 5b 80 bb 6d  2c 0e 9f 99 2e 29 29 b4  |...<[..m,....)).|
000000a0  78 dd c4 b4 78 2b 15 32  6d 3d c7 20 66 10 be 85  |x...x+.2m=. f...|
000000b0  f4 c3 20 2a 93 92 3a a3  9e 97 68 bb 83 e7 b9 34  |.. *..:...h....4|
000000c0  96 09 46 79 7d 2f e3 cc  e4 a0 5f 80 2b 17 06 59  |..Fy}/...._.+..Y|
000000d0  83 1b 8c 95 63 57 08 19  8f 0d 9a c4 6c dd 22 cc  |....cW......l.".|
000000e0  01 91 c4 6c 72 99 65 e2  1d e9 7f 9f ba 38 03 e5  |...lr.e......8..|
000000f0  93 84 28 6f 3a ae a6 82  30 60 c6 f0 ee a7 22 e1  |..(o:...0`....".|

PURB's internal structure:

*** PURB Details ***
Original Data: len 141
PURB: header at 0 (len 80), payload at 80 (len 144), total 256 bytes
Nonce: [151 174 18 243 85 196 72 42 17 124 122 51] (len 12)
Cornerstones: Curve25519-full @ offset 12 (len 32)
  Value: [251 69 104 174 79 132 95 180 165 100 152 45 245 223 147 12 207 226 3 42 175 167 155 7 27 11 136 239 110 83 213 135]
  Allowed positions for this suite: [12 44 108 140]
  Positions used: [12:44 44:76 108:140 140:172]
  Value @ pos[12:44]: [47 134 202 153 221 246 138 138 146 63 35 185 60 70 98 68 206 63 234 108 253 228 12 249 54 101 96 208 110 231 161 165]
  Value @ pos[44:76]: [187 71 12 220 133 74 229 184 23 229 44 67 88 255 232 110 160 177 137 61 28 41 142 21 71 101 138 178 20 198 102 178]
  Value @ pos[108:140]: [119 106 124 205 190 134 167 186 123 62 44 186 189 104 134 191 143 69 73 207 54 183 221 95 18 32 119 191 121 79 213 176]
  Value @ pos[140:172]: [24 238 210 38 169 190 151 60 91 128 187 109 44 14 159 153 46 41 41 180 120 221 196 180 120 43 21 50 109 61 199 32]
  Recomputed value: [251 69 104 174 79 132 95 180 165 100 152 45 245 223 147 12 207 226 3 42 175 167 155 7 27 11 136 239 110 83 213 135]
Entrypoints for suite Curve25519-full
  Entrypoints [0]: [39 149 223 250 186 177 116 42 49 215 24 73 29 209 55 115 112 31 185 210 33 221 98 5 49 181 182 149 97 14 217 222] @ offset 44 (len 36)
Padded Payload: [201 159 179 61 134 162 237 175 74 68 146 142 55 30 232 236 238 65 82 202 48 126 21 156 207 23 10 24 119 106 124 205 190 134 167 186 123 62 44 186 189 104 134 191 143 69 73 207 54 183 221 95 18 32 119 191 121 79 213 176 24 238 210 38 169 190 151 60 91 128 187 109 44 14 159 153 46 41 41 180 120 221 196 180 120 43 21 50 109 61 199 32 102 16 190 133 244 195 32 42 147 146 58 163 158 151 104 187 131 231 185 52 150 9 70 121 125 47 227 204 228 160 95 128 43 23 6 89 131 27 140 149 99 87 8 25 143 13 154 196 108 221 34 204] @ offset 80 (len 144)
MAC: [1 145 196 108 114 153 101 226 29 233 127 159 186 56 3 229 147 132 40 111 58 174 166 130 48 96 198 240 238 167 34 225] @ offset 224 (len 32)

Decryption:

Success: true
Error message: <nil>
And presently I was driving through the drizzle of the dying day, with the windshield wipers in full action but unable to cope with my tears.
00000000  41 6e 64 20 70 72 65 73  65 6e 74 6c 79 20 49 20  |And presently I |
00000010  77 61 73 20 64 72 69 76  69 6e 67 20 74 68 72 6f  |was driving thro|
00000020  75 67 68 20 74 68 65 20  64 72 69 7a 7a 6c 65 20  |ugh the drizzle |
00000030  6f 66 20 74 68 65 20 64  79 69 6e 67 20 64 61 79  |of the dying day|
00000040  2c 20 77 69 74 68 20 74  68 65 20 77 69 6e 64 73  |, with the winds|
00000050  68 69 65 6c 64 20 77 69  70 65 72 73 20 69 6e 20  |hield wipers in |
00000060  66 75 6c 6c 20 61 63 74  69 6f 6e 20 62 75 74 20  |full action but |
00000070  75 6e 61 62 6c 65 20 74  6f 20 63 6f 70 65 20 77  |unable to cope w|
00000080  69 74 68 20 6d 79 20 74  65 61 72 73 2e           |ith my tears.|