Tiếp nối ý tưởng chữ ký Lamport: để ký thông điệp có bản băm là chuỗi bit m1m2…mn (mi∈{0,1}), người ký tiết lộ ski,mi cho mỗi vị trí i (tức lộ nửa khoá bí mật tương ứng với giá trị bit thực tế của thông điệp, giữ bí mật nửa còn lại). Chữ ký là dãy n chuỗi σ1,…,σn.
Người xác thực có khoá công khai (pki,0,pki,1)i=1n (với pki,b=SHA256(ski,b)) và biết trước chuỗi bit thông điệp. Chữ ký hợp lệ khi và chỉ khi với mọi i: SHA256(σi)=pki,mi.
Cho khoá công khai, chuỗi bit thông điệp và chữ ký, hãy xác định chữ ký có hợp lệ hay không.
Ví dụ
Input:
1
0
65ed28e30a4315cf7a4c2ed441fbce32dd375844660572eb06725d2d1dfa4c89 f8ddd97541a41777b2561694bf24c1ce374e6ed9a195e0003b0a2121dca1c3e7
only0
Output:
VALID
(Vì SHA256(only0) trùng với pk1,0, đúng với bit thông điệp là 0.)
Dòng đầu tiên chứa số nguyên n (n≥0) — độ dài (bit) của bản băm thông điệp.
Dòng thứ hai chứa chuỗi bit thông điệp gồm n ký tự 0/1 (nếu n=0 thì dòng này rỗng).
n dòng tiếp theo, dòng thứ i chứa hai chuỗi hex pki,0 và pki,1 cách nhau bởi dấu cách.
n dòng cuối, dòng thứ i chứa chuỗi σi (không chứa khoảng trắng) — phần chữ ký được tiết lộ tại vị trí i.
In ra đúng một dòng: VALID nếu chữ ký hợp lệ với mọi vị trí, ngược lại in INVALID (kể cả trường hợp n=0, quy ước là VALID).
Ví dụ:
Đầu vào:
2
11
9d355a3a8f267dee81cab05d2eb3111ca37d6f0c96f550b8803ac22a5a10a473 85478e978a441311de4d07f0b93b9ca1761fb5bfc4f7697d6a90bb529fbaa48d
daf31fbfc61e13e57b1492d28c8e05bc72798a0c17000310c6b9d113b6e025a7 99ae59705a7898c8c9b30b1ad4be3566212e3121c0ca5a1224f04f61fbaa72b2
aa1
wrongsecret
Đầu ra:
INVALID
Đầu vào:
3
010
d34beeb70cddcc1f973ab468a4f7467557065a2fc1b9c118e728035b25d38af0 568db421693629b25e9eb5597365e4e862638d29dcc0bb03f4085ebf2d5afd6b
c9f9b435ea28e08508a8cde57592bc1c430a6eafc4fdcdd0c981d4e58201046e ec59dfc2f1a7cc0d5086701d438f37bc7ac0775b9fa9811cd2f50df710f91211
71887144a16bdf3185604be1dabb427fe611eaa17b7c02d2d023a5bff2233752 62760e02e295d95c44a38f61cd70b829b4db0a8041d930c735ed5daec64689ae
s10
s21
s30
Đầu ra:
VALID
Đang tải editor...