Changes

Jump to: navigation, search

Identity/AttachedServices/KeyServerProtocol

2,038 bytes added, 07:31, 10 July 2013
move test vectors to their own section
* confirm this is actually implementable inside Firefox (especially w.r.t. NSS)
 
The test vectors included on this page were produced by the python code in https://github.com/warner/picl-spec-crypto . The diagrams may lag behind the latest version of that code.
= Creating The Account =
09503006915442163037721228467470
35652616593381637186118123578112
 
The following examples use a non-ASCII email address of "andré@example.org" (with an accented "e", UTF8 encoding is 616e6472c3a9406578616d706c652e6f7267) and a non-ascii password of "pässwörd" (with accents on "a" and "o", UTF8 encoding is 70c3a4737377c3b67264). Given the password-stretching described earlier, this results in an srpPW of:
5b597db713ef1c05
67f8d053e9dde294
f917a0a838ddb661
a98a67a188bdf491
=== SRP Verifier Calculation ===
[[File:PICL-IdPAuth-SRP-Verifier.png|client-side SRP Verifier calculation]]
Given Test vectors are provided at the sample email and password above, the SRP Verifier calculation yields the followingend of this page. The protocol requires that several values (Note: the "a", "b", "srpSalt is normally generated ") are chosen randomly, but for illustrative purposes, here we used fixed prethe test vectors use carefully-crafted non-calculated random values)* srpSalt (hex string): 00f1000000000000 0000000000000000 0000000000000000 000000000000009b* x (internalFor the user's sake, as a hex string): ffd36e11f577d312892334810d55089cb96c39443c255a9d85874bb6df69a537* x (internal, as decimal integer): 115713340795669212831971819661984296758573939625477265918747447380376082294071* v (internal, decimal integer): 71059715947322363168818619231596014948502664753879821526306672648301269136332546839100253983803912725413731153916626297948231925131054776204301203872383833825292863403260680360596134078965569670569235971894130915251144385164054999200238790399524380121634022271328529734937174066811503227222944678351915275352511787735824142082281320032065951325711784707869987141733046865019265053926187756870781628009053137574167426864838849814321621297918109241151570638074596222682772158532484976644908876686423788254204401136102193244276625617385185761349298945899736743346225452678822123821266140913290180513540399852050747986* srpVerifier (hex string):00901a4e05a7986c fafe2c80993f6e21847d38b8b9168065 149480722d008c9ac5fe418d799d03c2 b1c26db2afcd45130a0601d310faa060 cc728888aba130a17d855773107ecc92 f31ea3a3838bc72777fc26420ed59918 298583d15640b965939dd6967e943bd6 ed846dbbb18885c74f6e9370e4eeecc4 c8e2a648850cf2ba5baab18888b433c4 b0bd8891eeffe16cc022a098284696bc 3a81e735a1a2a37162f62b980879bbd4 03ae55548b9feeecb18bf0740f0d078a 435fedb5324d630e8a14fed435fbb5ea 4b6e94b8b129799d2a0991671a67be34 149dc5e94a4a3d05749fc3b9e1a53282 96b20a15348420bed2f28d2558cb4099 f30be8a7240c9252please ensure implementations use proper random values instead of simply copying the test vectors.
The client sends srpSalt and srpVerifier to the server when it creates the account. It will also re-compute the 'x' value (as an integer) during sign-in. The server will convert the srpVerifier string back into an integer ('v') for use during its own sign-in calculations.
[[File:PICL-IdPAuth-SRP-Server.png|server--side SRP]]
 
* b (hex integer, normally random but pre-calculated for this example):
00f3000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000020
* b (as decimal integer):
1198277
66042000957856349411550091527197
08125226960544768993643095227800
29105361555030352774505625606029
71778328003253459733139844872578
33596964143417216389157582554932
02841499373672188315534280693274
23189198736863575142046053414928
39548731879043135718309539706489
29157321423483527294767988835942
53343430842313006332606344714480
99439808861069316482621424231409
08830704769167700098392968117727
43420990997238759832829219109897
32876428831985487823417312772399
92628295469389578458363237146486
38545526799188280210660508721582
00403102624831815596140094933216
29832845626116777080504444704039
04739431335617585333671378812960
* srpB (hex string):
00857f70b197a6f3 f79c4270a41c581d
62c7ec7fc554c797 481d4b4075b06be3
df7f4f189e71fbec 08d1bcff8c5e4f74
65256cba8a78b725 daa0b9bddcbbea43
d916067b12c59aaf 4a9cdad53e08e4a5
770ea72287987302 2c5f5f608eb94795
710a907e1b425080 688d9e7790ce0781
6e6b2cdb9ad2c18f 60a2a5feb91b6da3
92579c5eb1e36f42 5b85c34085b216b9
7c4a3f7ffeb887c8 78ce0152d8be66eb
9c7a51abbae3b3f6 56c6e56d95d3e148
a23af3e9aaa54c72 cde19b58bdcbfb34
b9eb7f6dcbcd86e2 7e6221f6d3da2517
255088f5e7c408b3 7d6765120134b719
86287225d781c49a e5436b89525e17eb
dcb8f3b7eb43163a cfb31c45a51a5267
Later, getToken2() will be called with the client's srpA string and its M1 key-confirmation string. srpA is combined with srpB to calculate the "u" integer. srpA is also turned into an integer and used to compute the shared-secret "S" integer. S is then used to compute the shared key "srpK", which is the output of the SRP process.
('''Again, it is critical that the client keep its "a" and "x" integers secret, both during and after the protocol run.''')
 
* a (hex integer, normally random but pre-calculated for this example):
00f2000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 000000000000115c
* a (as decimal integer):
1193346
47663227291363113405741243413916
43482736314616601220006703889414
28162541137108417166380088052095
43910927476491099816542561560345
50331133015255005622124012256352
06121987030570656676375703406470
63422988042473190059156975005813
46381864669664357382020200036915
26156674010218162984912976536206
14440782978764393137821956464627
16314542157937343986808167341567
89864323268060014089757606109012
50649711198896213496068605039486
22864591676298304745954690086093
75374681084741884719851454277570
80362211874088739962880012800917
05751238004976540634839106888223
63866455314898189520502368799907
19946264951520393624479315530076
* srpA (hex string)
00f2a357d7da7132 1be6c070fb3a5928
8cec951cb13e7645 1f8c466ab373626a
7272dc1484c79ea3 cd1ea32e57fa4665
2e6450aa61ac5ee7 eac7a8c06c28ab19
5ccbe57500062c50 1a15fbb23a7f71b2
35448326af5e51c0 63f167378c782137
93dbc54efb32f204 de753d7a6b3d826d
aaefc007d17862af 9b6a14e35f17f1eb
8b13c7b8ffa1f6f4 7b70d62bd0c351b4
7596b0b0abcba95c 2d731869ed6e4ec2
4ab90da8cb22e65d 256315ee84d8079b
4086d90c4e827b51 bb4e4d2d7b387da0
2e6b48904a3ba6d7 648a9bcdf3e9fc60
7cfba92f8eacae12 3ac45a79307cf3dd
281ed75a96c7de8f cd823f148dcc0634
9795f825fb029859 b963ab88320133de
* u (hex string)
610c6df1f495e429 8a2a59a0f5b00d47
ea2ed6ce2ccec8f7 ade158314a7bd794
* S (hex string)
009cc8da2f7a9501 5bc0091faa36d6ef
ff52c33b924353e1 1de1d8e738654d6f
6a481003acb17cae 2ba2d4ae3fea8431
4c940397640fce92 d9153dffb7f3bd29
cbdb49e4ff0d26c4 67061337fd370851
4e3039d24cb54dc4 6420426b0daf7724
63fe06eb1521c7b0 96c4eeb6e5f9f739
49dcc74bc91baab8 398aff6df6735da2
c9486a645a20f2d7 d8f455a2bd226f21
e127f23e202b21fd d4ef64dc1a6740b6
fcd2a6b032fcb393 a2b9d97506b6fb89
5585d29173cc0e89 c3b3077ffa31215d
b602b28364f81012 46ee9e8c47b63881
f3f867e67971825d f6a881d1142989ab
cd4abba9c27ae529 c31be53f69966ccb
81f7660f95d5f8fc 45d052df3bcbb761
[[File:PICL-IdPAuth-SRP-Client2.png|client-side SRP 2]]
Both client and server also hash "S" into "srpK". This is the shared session key, from which specific message encryption and MAC keys are derived (as described below).
 
* M1 (hex string):
182ff26523922c52
559cab3cdfc89a74
c986b1d7504ea53d
11d9a204fc54449d
* srpK (hex string):
78a36d3e0df089e7
29a98dee3290fc49
64cd6ec96b771d6a
bb6efe9181be868b
=== SRP Notes ===
resetAccount() needs request confidentiality, since the arguments include the newly wrapped kB value and the new SRP verifier, both of which enable a brute-force attack against the password. HAWK provides request integrity. The response is a single "ok" or "fail", conveyed by the HTTP headers, so we do not require response confidentiality, and can live without response integrity.
So the single-use resetToken is used to derive three values (shown with their sample values):
* tokenID: 52437066aae511d3 3709bf25dc6a682a 7e943d49d94c84b3 4e1e6b11c9913159* request HMAC key: 7de6c9b102dac62f 81d3a09baa00523d e7170ff17238b3af 8491e4cfb23e1a88* request XOR key: 82d447f095aa8023 3eb5cb5d6c4eea25 5857809b6326b6bd 55fab2d3498b1cf8 a31bb0e319d7c0dc 2792740a480c1a98 99c1a6328bc2066e 3ecc9e8079ae8af6 046f15f3a586bfb3 b9908de7cd60b504 44fdfacc3cf32e2b efc72fca9063e28d a815989f86223394 b89db34bffdc94bb 68c05a49d1f1f63a 2c463d335a06c007
[[File:PICL-IdPAuth-resetAccount.png|Deriving the resetAccount Keys]]
The request data will contain wrap(kB), a new (randomly-generated) SRP salt, and the new SRP verifier, all concatenated together. Since we always pad the SRP verifier to the full (256-byte) group length, all four pieces are fixed-length. We generate enough reqXORkey bytes to cover all four values. In our example, the concatenated plaintext is as follows: 404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
The request data is XORed with requestXORkey, then delivered in the body of a HAWK request that uses tokenID as credentials.id and requestHMACkey as credentials.key . Note: it is critical to include the request body in the HAWK integrity check (options.payload=true, on both client and server), otherwise a man-in-the-middle could substitute their own SRP verifier, giving them control over the account (access to the user's class-A data, and a brute-force attack on their password).
[[File:PICL-IdPAuth-encryptResetAccount.png|Encrypting the resetAccount Request]]
 
In our example, the XORed ciphertext is:
 
c29505b3d1efc664
76fc81162003a46a
0806d2c83773e0ea
0da3e88815d642a7
03ba1240bd72667b
8f3bdea1e4a1b437
297014813f77b0d9
8675243bc5133449
c4aed73061437974
7159472c01ad7bcb
942c281fe826f8fc
371ef5114cbe3c52
48f47a7c62c7d573
507459a013317a54
9831a8ba250400cd
d4bfc7c8a6fb3ef8
 
Clients might use resetAccount for two reasons:
* kB: the master key for data stored as "class-B", a 32-byte binary string.
* wrap(kB): an encrypted copy of kB. The keyserver stores wrap(kB) and never sees kB itself. The client (browser) uses a key derived from the user's password to decrypt wrap(kB), obtaining the real kB.
 
= Test Vectors =
 
The following example uses a non-ASCII email address of "andré@example.org" (with an accented "e", UTF8 encoding is 616e6472c3a9406578616d706c652e6f7267) and a non-ascii password of "pässwörd" (with accents on "a" and "o", UTF8 encoding is 70c3a4737377c3b67264).
 
These test vectors were produced by the python code in https://github.com/warner/picl-spec-crypto . The diagrams may lag behind the latest version of that code.
 
== stretch-KDF ==
 
email:
616e6472c3a94065
78616d706c652e6f
7267
 
password:
70c3a4737377c3b6
7264
 
K1:
f84913e3d8e6d624
689d0a3e9678ac8d
cc79d2c2f3d96414
88cd9d6ef6cd83dd
 
K2:
5b82f146a6412692
3e4167a0350bb181
feba61f63cb17140
12b19cb0be0119c5
 
stretchedPW:
c16d46c31bee242c
b31f916e9e38d60b
76431d3f5304549c
c75ae4bc20c7108c
 
== main-KDF ==
 
mainSalt (normally random):
0001020304050607
08090a0b0c0d0e0f
1011121314151617
18191a1b1c1d1e1f
 
srpPW:
1ea1cdd3ba3bb3a8
b6c46331123f48a6
746f143014f5a389
24e6fea4dc1c1289
 
unwrapBKey:
94995fc5423827df
42d598076eccd996
656183a309e9fbaf
e5026431d338b115
 
internal x (base 10):
137598577746
20950182695987769526622297924214
84665105182182372602062190994896
 
internal x (hex):
030ac7c51717e1d5
35d59725cb7c49fb
4936b7db7fcd0f10
17d3f1ffef50e5d0
 
v (verifier as number) (base 10):
914205
81735470597826353382993806239740
11269014547415710721123623779303
40577934966702279822019429237166
85777414275311785862734740227831
07992726500267571929376592901913
18064022616547283873724124275736
15772870036501836242138681573039
79134196479839195060563726666145
91886023021879280485567507056439
54248700318708010771386921629212
79420638327471362434416724355461
72934544873168338790005382928033
88728242355654245060876357499918
14028809240099280481407481230320
68269674162426430261934197103097
99968937656431136067890224663385
48685839318699687268537410286424
14469699859895598445302042986990
86071206600454059861610331587789
 
== SRP Verifier ==
 
k (base 10):
259003859907
09503006915442163037721228467470
35652616593381637186118123578112
 
srpSalt (normally random):
00f1000000000000
0000000000000000
0000000000000000
0000000000000070
 
srpVerifier:
00b9648c840be3e4 5ae305640dc24c64
ee3a1fb083bcafe4 0e10b37d04ea5a55
05c7538f6a72a6b9 748c97b2fd6d4dc4
89a2cbee5ae2ea9d cb7f2dbe1ad99518
75029ebb7e2f2bd5 bce1a619038092f4
2ea4ccba99665bc4 fd6c3c393d961b1c
a2b8f61da5a81c2c cfdf89d28bc256fb
b201b79908f64613 4a41fd1ae451f62f
ccb00809b5ef8b05 7f198296e5aad231
baf321487d6abfed 2070556097720d5e
f48d45724749c7a8 73768238bbd01123
0d004d5d487cc6ac ee40e6ab13a33f64
bd702d5c754167f2 230bb1d15151c070
7ef25d2787727424 32ea0537e95c1a04
d3006d10d99a1c7d 3318d284dc92460d
84dae38b4b698433 61008de94bd744cd
 
== SRP B ==
 
private b (normally random) (base 10):
1198277
66042000957856349411550091527197
08125226960544768993643095227800
29105361555030352774505625606029
71778328003253459733139844872578
33596964143417216389157582554932
02841499373672188315534280693274
23189198736863575142046053414928
39548731879043135718309539706489
29157321423483527294767988835942
53343430842313006332606344714480
99439808861069316482621424231409
08830704769167700098392968117727
43420990997238759832829219109897
32876428831985487823417312772399
92628295469389578458363237146486
38545526799188280210660508721582
00403102624831815596140094933216
29832845626116777080504444704039
04739431335617585333671378812933
 
private b (hex):
00f3000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000005
 
transmitted srpB:
00de219f6b48de47 bb8a20e450d50cef
10c9c9fbc80482c2 9792f89f9bbfd27f
a0e082209f919128 e29a8ffadfdcb48b
e0000fc447d05afd 59b6032581de5596
8ff5f39034fc1aea d033b246660e4257
44fadcb824e7a14e fa6d2fc57502b9a7
b9cef2935a54c2c8 9d24589f1aa9091b
5f2981096e936592 dbbe0adfcb9b97f2
e677f5cb2112d90b 802af7df98eb29c5
31556f62d473e84e 50f70ac6d89e0503
228fb27eaca19f40 03f28516fb8b46c4
122510a9557c6d24 65bb13579e8ddbe5
7aa842d8ccd956f3 5643f43a4da35920
2485e21a6fede4a9 b3d55ee48eab9572
56f75283aed2c06a 9eb03f3feb29cb3b
6dbf644bcd8088cf 777072eb8b6b870e
 
== SRP A ==
 
private a (normally random) (base 10):
1193346
47663227291363113405741243413916
43482736314616601220006703889414
28162541137108417166380088052095
43910927476491099816542561560345
50331133015255005622124012256352
06121987030570656676375703406470
63422988042473190059156975005813
46381864669664357382020200036915
26156674010218162984912976536206
14440782978764393137821956464627
16314542157937343986808167341567
89864323268060014089757606109012
50649711198896213496068605039486
22864591676298304745954690086093
75374681084741884719851454277570
80362211874088739962880012800917
05751238004976540634839106888223
63866455314898189520502368799907
19946264951520393624479315528231
 
private a (hex):
00f2000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000000
0000000000000000 0000000000000a27
 
transmitted srpA:
00e1cad4005422e9 f1bf68ba186c75ed
73f199ec71c2cdf0 e74baa258f9e594a
ab48c2d74f064e45 57cfbf05fa0a1c17
491ae8a0568f8f40 04a8529414c6d124
7bf4fe98d0596792 3997eb362fc0cb47
39fde90abe8623d2 38d80003bb6a66e0
987748a329596d54 a2514d50d426e2ac
00eb4c7939977bc1 535625c19e34db08
0a8742af30f3f975 bf668097d0c303c5
ad6408729dad779e ca0ebcb8688bff01
e7781510504fdd4a 5f3b7806353378b2
e98fa90ab9224d7a 9973becafd8b428a
9d8e64bc79cd505c 2f976adacc9947f3
0b1e819f3b958b18 be8f3d2c84726faa
23bdae8e74ecda07 d279f75b25cb9c33
274f42fe038c3d5b 058b2877eb60841c
 
== SRP key-agreement ==
 
u:
802ae3bc2a4f3117 77e24280b08ceda0
99d46ba99a65a750 e771229efca2aea3
 
S:
00516c2f83d5602c 17547fba0c6f3171
bc2cb6462670ec08 f8a0d7bc46eb015b
f40dfc06c5be9492 40628605bf2bf598
3ae15679cc7968eb a15249e96f561d47
f6b7d8b43e9ebaeb 127daa2536d52c05
d412c10ea2485fd0 bb90d716a9d36163
83fd3fbcc7981c3b 769bfb5c42244e83
8cfb9fbaf0f37e6b 3336e2af42c6e615
90a7be399352a2a8 b47d85437ffb0859
9f821993ef05328f d07470ba1db050bc
d588cc10a6e8dd68 e61d787b5e4a0634
5d5e90ee60c5ab95 329de9526c5684bf
5dad4c75450885a3 249709d37e0ba85e
67ee644ca01ee1de 9ebe3b730a6dd188
6300abae80ebeb68 f0e141cb71a861c7
d42f50d1723fbe0b 78b46305dffb3b90
 
M1:
f8c82e57d1771a24
229c05858cc03bee
ea3a7b73d39939d5
a3a8dbbc9dc474f2
 
srpK:
94ad3e71e29ceb1f
2ed2b80996314344
6cfa5d8640c271dd
b632f094f7eda7c7
 
== getSignToken request ==
 
srpK:
94ad3e71e29ceb1f
2ed2b80996314344
6cfa5d8640c271dd
b632f094f7eda7c7
 
respHMACkey:
001d14a524e7e7f0
1de527ad01dddce0
e64f915dca46242a
7795397d98cbbb16
 
respXORkey:
e51958994bf03d02
f0651338ea18a186
7f2bb49089000a88
d367770bd9696b86
99c25804ff3ade0d
08622bd66b5b1332
4ce14f315a6dca6c
20a8b49e3743db31
8fb2670ba4b2d10f
416f61dd4eb7bf53
6a233cae88636a19
078213557e583622
 
plaintext:
2021222324252627
28292a2b2c2d2e2f
3031323334353637
38393a3b3c3d3e3f
4041424344454647
48494a4b4c4d4e4f
5051525354555657
58595a5b5c5d5e5f
6061626364656667
68696a6b6c6d6e6f
7071727374757677
78797a7b7c7d7e7f
 
ciphertext:
c5387aba6fd51b25
d84c3913c6358fa9
4f1a86a3bd353cbf
eb5e4d30e55455b9
d9831a47bb7f984a
402b619d27165d7d
1cb01d620e389c3b
78f1eec56b1e856e
efd30568c0d7b768
29060bb622dad13c
1a524eddfc161c6e
7ffb692e0225485d
 
MAC:
40e3dd0d0b299033
a31222ceb3504ad4
7e55fc05f8b94402
2ed9e2be5c4be3e3
 
response:
c5387aba6fd51b25
d84c3913c6358fa9
4f1a86a3bd353cbf
eb5e4d30e55455b9
d9831a47bb7f984a
402b619d27165d7d
1cb01d620e389c3b
78f1eec56b1e856e
efd30568c0d7b768
29060bb622dad13c
1a524eddfc161c6e
7ffb692e0225485d
40e3dd0d0b299033
a31222ceb3504ad4
7e55fc05f8b94402
2ed9e2be5c4be3e3
 
== signCertificate ==
 
signToken:
6061626364656667
68696a6b6c6d6e6f
7071727374757677
78797a7b7c7d7e7f
 
tokenID:
8b5ff98850a2c98a
8059ee891c15b9a6
1af08356f54d865c
39f95f048d185195
 
reqHMACkey:
85f9aa22e9b35557
3504cd0e934a6c2b
1837fe6ca70d4932
627ba1c02b9aebc2
 
== resetAccount ==
 
resetToken:
8081828384858687
88898a8b8c8d8e8f
9091929394959697
98999a9b9c9d9e9f
 
tokenID:
52437066aae511d3
3709bf25dc6a682a
7e943d49d94c84b3
4e1e6b11c9913159
 
reqHMACkey:
7de6c9b102dac62f
81d3a09baa00523d
e7170ff17238b3af
8491e4cfb23e1a88
 
reqXORkey:
82d447f095aa8023
3eb5cb5d6c4eea25
5857809b6326b6bd
55fab2d3498b1cf8
a31bb0e319d7c0dc
2792740a480c1a98
99c1a6328bc2066e
3ecc9e8079ae8af6
046f15f3a586bfb3
b9908de7cd60b504
44fdfacc3cf32e2b
efc72fca9063e28d
a815989f86223394
b89db34bffdc94bb
68c05a49d1f1f63a
2c463d335a06c007
 
plaintext:
4041424344454647
48494a4b4c4d4e4f
5051525354555657
58595a5b5c5d5e5f
a0a1a2a3a4a5a6a7
a8a9aaabacadaeaf
b0b1b2b3b4b5b6b7
b8b9babbbcbdbebf
c0c1c2c3c4c5c6c7
c8c9cacbcccdcecf
d0d1d2d3d4d5d6d7
d8d9dadbdcdddedf
e0e1e2e3e4e5e6e7
e8e9eaebecedeeef
f0f1f2f3f4f5f6f7
f8f9fafbfcfdfeff
 
ciphertext:
c29505b3d1efc664
76fc81162003a46a
0806d2c83773e0ea
0da3e88815d642a7
03ba1240bd72667b
8f3bdea1e4a1b437
297014813f77b0d9
8675243bc5133449
c4aed73061437974
7159472c01ad7bcb
942c281fe826f8fc
371ef5114cbe3c52
48f47a7c62c7d573
507459a013317a54
9831a8ba250400cd
d4bfc7c8a6fb3ef8
Confirm
471
edits

Navigation menu