Việc Ngân hàng dùng chữ ký “mù” để ký vào đồng tiền làm nảy sinh một vấn đề khác, đó là: ơng A gian lận, gửi tới ngân hàng đồng tiền ghi giá trị 50 $ để xin chữ ký của họ trên đồng tiền này, nhưng lại báo với ngân hàng rằng đồng tiền đó chỉ ghi giá trị 1$. Như vậy ơng A đã có đồng tiền 50 $ cùng với chữ ký của ngân hàng, nhưng tài khoản của ông chỉ bị khấu trừ 1 $. Ông A đã “thắng” đậm.
3.1.3. Vấn đề tiêu xài một đồng tiền hai lần.
Tiền điện tử có dạng số hố, nên dể dàng tạo bản sao từ bản gốc. Chúng ta không thể phân biệt được giữa đồng tiền “gốc” và đồng tiền “sao”. Kẻ gian có thể tiêu xài đồng tiền “sao” này nhiều lần mà không bị phát hiện.
Hệ thống tiền điện tử được áp dụng vào thực tế, thì phải có khả năng ngăn ngừa hay phát hiện được trường hợp “Một đồng tiền tiêu xài hai lần” (double spending).
Để giải quyết vấn đề này, đã có các giải pháp khác nhau tuỳ theo từng hệ thống tiền điện tử.
3.2. GIẢI PHÁP CHO BÀI TOÁN “ẨN DANH” VÀ
“CHỐNG GIAN LẬN GIÁ TRỊ ĐỒNG TIỀN”.
3.2.1. Giới thiệu giải pháp.
Tính ẩn danh là đặc tính quan trọng của phương thức thanh toán bằng tiền điện tử Như đã trình bày ở trên, để giải quyết vấn đề này, người ta dùng kỹ thuật chữ ký “mù”. Chữ ký “mù ”đảm bảo ngân hàng khơng có được bất cứ mối liên hệ nào giữa đồng tiền điện tử và chủ sở hữu của nó.
Tùy theo từng hệ thống tiền điện tử, sẽ áp dụng những sơ đồ chữ ký “mù” khác nhau. Chẳng hạn, lược đồ Chaum-Fiat-Naor dùng sơ đồ chữ ký mù RSA, lược đồ Brand dùng sơ đồ chữ ký mù Schnorr. Mỗi lược đồ cũng có những ưu nhược điểm khác nhau.
Mặc dù đạt được tính ẩn danh, nhưng giải pháp chữ ký mù làm nảy sinh một vấn đề: làm sao để ngăn chặn Alice đưa cho ngân hàng ký một đồng tiền khơng trung thực. Ví dụ: Alice yêu cầu rút 1$, nhưng lại đưa cho ngân hàng ký lên đồng tiền có giá trị 100$. Vì ngân hàng ký mù lên đồng tiền đó, nên khơng thể biết được nội dung của nó. Để giải quyết vấn đề này, có hai phương pháp được đưa ra.
1). Phương pháp thứ nhất:
Ngân hàng dùng một bộ khóa (khố ký, khóa kiểm tra chữ ký) khác nhau cho mỗi loại tiền. Nếu có k giá trị đồng tiền thì ngân hàng phải có k bộ khố khác nhau.
Ví dụ với đồng tiền giá trị 1$ thì dùng khố k1, đồng tiền 50 $ thì dùng khố k50. Như vậy nếu gian lận của ông A tạo ra đồng tiền 50$ với khóa k1, thì đó là đồng tiền khơng hợp lệ.
2). Phương pháp thứ hai:
Để rút từ ngân hàng một đồng tiền giá trị T, ông A phải tạo k đồng tiền C1,C2,...,Ck cùng giá trị T. Chúng đều được gắn định danh, khác nhau duy nhất giữa chúng là số sê-ri. Ông A làm “mù” những đồng tiền này, và gửi chúng đến ngân hàng.
Ngân hàng yêu cầu ông A cung cấp thông tin để khử “mù” k-1 đồng tiền bất kỳ. Ngân hàng khử “mù” và kiểm tra chúng. Nếu tất cả đều hợp lệ, ngân hàng ký “mù” lên đồng tiền còn lại Ci (là đồng tiền mà ngân hàng không khử “mù”), và gửi cho ơng A.
Ngân hàng có sự đảm bảo cao rằng đồng tiền còn lại Ci cũng là hợp lệ, vì nếu
ơng A gửi kèm đồng tiền không hợp pháp trong số k đồng tiền, thì xác suất bị phát hiện ít nhất là k-1/ k. Xác suất này càng cao nếu k càng lớn. Tuy nhiên nếu k quá lớn thì hệ thống xử lý phải trao đổi nhiều dữ liệu.
3.2.2. Lược đồ Chaum-Fiat-Naor.
3.2.2.1. Lược đồ.
Lược đồ Chaum- Fiat- Naor, là lược đồ hệ thống tiền điện tử có tính ẩn danh. Để bảo đảm tính ẩn danh của đồng tiền, lược đồ sử dụng kỹ thuật “chữ ký mù” RSA. Trong đó khố mật là a, khóa cơng khai là (n, b), hàm f , g không “va chạm”.
Mỗi người dùng có số tài khoản u, ngân hàng sẽ giữ số đếm v liên quan đến số tài khoản này (đơn vị Ui tạo ra), ngân hàng dựa vào u để xác định kẻ gian lận.
Hình 4 : Khái quát lược đồ Chaum – Fiat – Naor
1). Khách hàng gửi đồng tiền ở dạng “mù” , yêu cầu Ngân hàng ký.
2). Ngân hàng gửi đồng tiền đã ký cho Khách hàng (đồng tiền vẫn còn “mù 3). Sau khi xóa “mù” đồng tiền, Khách hàng chuyển tiền cho Người bán hàng. 4). Người bán hàng chuyển giao hàng cho Khách hàng.
5). Người bán chuyển tiền đến Ngân hàng để kiểm tra tính hợp lệ của đồng tiền.
1
3 2
5 4
1/. Giao thức Rút tiền:
1). Ông A muốn rút từ ngân hàng một đồng tiền ẩn danh, thì phải tạo k đơn vị Ui và chuyển chúng đến ngân hàng. Mỗi Ui được tạo từ các số ngẫu nhiên ai , ci , di sao cho Ui độc lập và duy nhất, 1 ≤ i ≤ k. Cụ thể ⊕ là phép XOR, ∧ là phép nối.
Ui = f (xi, yi ), xi = g ( ai , ci ), yi = g (ai ⊕ (u ∧ (v + i)), di ).
2). Ông A làm “mù” k đơn vị Ui thành Bi bằng tham số “mù” ngẫu nhiên ri và gửi chúng đến ngân hàng. Những tham số “mù” đó ngăn chặn ngân hàng kiểm tra tức thì nội dung những “đồng tiền” Ui. Cụ thể Bi = Ui ri b mod n.
3). Ngân hàng chọn ngẫu nhiên k/2 đơn vị Ui để kiểm tra, yêu cầu ông A cung cấp các tham số ri , ai , ci, di tương ứng với những đơn vị Ui mà ngân hàng đã chọn.
4). Ông A cung cấp cho ngân hàng các tham số ri , ai , ci, di theo yêu cầu.
5). Dựa vào các tham số do ơng A cung cấp, ngân hàng xóa “mù” k/2 đơn vị Ui
đã chọn, kiểm tra để đảm bảo rằng ơng A khơng có gian lận.
Nếu khơng có gian lận, ngân hàng mới ký “mù” lên những đơn vị Uj cịn lại (đó là đơn vị Uj mà ngân hàng khơng xố “mù, chính là Bj )và gửi cho ơng A.
Chữ ký trên Bj là Bja mod n. Chú ý j ngẫu nhiên ≤ k, chỉ dùng k/2 phần tử Bj Sau đó ngân hàng trừ số tiền tương ứng vào tài khoản của ơng A.
6). Ơng A xoá “mù” đơn vị Bj đã được ngân hàng ký, bằng cách chia Bj a cho rj. Lúc này ơng A có đồng tiền điện tử với giá trị thật sự.
T = Uj a mod n = f (xj, yj) a mod n
2/. Giao thức Thanh tốn:
1). Ơng A gửi tiền T đến Ông B.
2). Ông B chọn chuỗi nhị phân ngẫu nhiên z1 z2… z k/2 và gửi nó đến ơng A. 3). Ơng A phản hồi lại tuỳ theo từng trường hợp sau:
+ Nếu zi = 1 thì ơng A sẽ gửi đến ông B: ai, ci và yi
+ Nếu zi = 0 thì ơng A sẽ gửi đến ông B: xi, ai ⊕ (u ∧ (v + i)) và di.
3/. Giao thức Gửi tiền:
1). Ơng B gửi lịch sử thanh tốn đến ngân hàng. 2). Ngân hàng kiểm tra chữ ký số của ngân hàng.
3). Ngân hàng kiểm tra đồng tiền này khơng bị tiêu xài trước đó.
4). Ngân hàng nhập vào cơ sở dữ liệu những đồng tiền đã tiêu xài, ghi lại chuỗi nhị phân zi và những phản hồi tương ứng từ ông A. Điều này giúp phát hiện kẻ tiêu xài hai lần.
5). Ngân hàng ghi T vào tài khoản của Ông B.
3.2.2.2. Phân tích – đánh giá.
Lược đồ Chaum- Fiat- Naor là lược đồ hệ thống tiền điện tử có tính ẩn danh.
1). Để bảo đảm tính “ẩn danh” của đồng tiền, lược đồ dùng “chữ ký mù” RSA. 2). Để ngăn ngừa người rút tiền khai “gian lận giá trị” đồng tiền, lược đồ đã sử
dụng giao thức “Cắt và chọn” Cut and choose).
Ngân hàng chọn ngẫu nhiên k/2 đơn vị Ui để kiểm tra, nếu khơng có gian lận xảy ra thì mới ký “mù” lên các đơn vị Uj còn lại. Cũng như lý luận ở trên về giao thức “Cắt và chọn”, ngân hàng có sự đảm bảo cao rằng đồng tiền còn lại Uj cũng là hợp lệ,
nếu k càng lớn.
3). Để ngăn chặn việc ‘tiêu xài hai lần’ một đồng tiền, lược đồ dùng giao thức “hỏi-đáp” để lấy một phần thơng tin định danh gắn lên đồng tiền. Nếu nó được “tiêu
xài hai lần”, thì thơng tin định danh trên hai lần “tiêu xài” sẽ kết hợp lại, để truy vết tìm ra kẻ gian lận.
Nếu ơng A tiêu tiền T hai lần, thì khả năng ngân hàng có thể lấy được cả hai tham số ai và ai ⊕ (u ∧ (v + i)) để tính được u. Đó là số tài khoản của ơng A tại ngân hàng, chính vì vậy từ u, ngân hàng có thể truy ra được ơng A là người có hành vi tiêu một đồng tiền hai lần.
Vì khả năng có cặp bít khác nhau trong 2 chuỗi z1, z2,…,zk/2 và z’1, z’2,…,z’k/2 là rất cao. Chỉ cần có một cặp bit tương ứng zi và z’i khác nhau, là ngân hàng có thể có đủ thơng tin định danh của ông A.
Xác suất để 2 chuỗi zi và z’i trùng nhau là /2 2
1
k , tức là ngân hàng khơng có đủ thơng tin để tìm ra được định danh của ơng A. Như vậy nếu chọn k đủ lớn thì khả năng hai chuỗi zi và z’i trùng nhau có thể xem là khó thể xảy ra.
4). Chi phí.
Trong lược đồ Chaum-Fiat-Naor chi phí (thời gian, tính tốn, tiền bac…) phụ thuộc vào độ lớn của k. Tại giao thức rút tiền, ông A gửi k packet đến ngân hàng, tuy nhiên, ngân hàng chỉ phải gửi trả lại 1 packet. Việc tiến hành làm “mù” và “xóa mù” k packet làm tăng sự tính tốn, trao đổi và thời gian lưu trữ.
Tại giao thức thanh tốn, sau khi ơng A gửi tiền đến ơng B. Ơng B gửi một chuỗi nhị phân tới ơng A, sau đó ơng A phải gửi k/2 phản hồi khác nhau. Điều này làm tăng thời gian và sự tính tốn, liên lạc và chi phí lưu trữ.
5). Tấn cơng.
Đây là phương pháp dựa vào kỹ thuật RSA, vì vậy, tất cả những cách tấn cơng vào RSA đều có thể tấn cơng vào lược đồ này.
Tuy nhiên, về mặt lý thuyết, có khả năng ơng A có thể tránh được sự phát hiện của ngân hàng khi tiêu xài hai lân. Điều này xảy ra khi ông A và ông C cùng hợp tác với nhau, cụ thể như sau:
Ông A sau khi thực hiện một giao dịch thanh tốn với ơng B, sẽ gửi những tiền đã tiêu tới ông C và mơ tả cho ơng C q trình giao dịch với ơng B. Như vậy, ngân hàng sẽ nhận được thông tin giao dịch từ ông B và ông C giống như nhau. Lúc này, ngân hàng sẽ khơng có khả năng xác định được định danh của ông A.
3.2.3. Lược đồ Brand.
Lược đồ được xây dựng dựa trên chữ ký Shnorr và bài toán đại diện trong nhóm cấp nguyên tố.
Gq là nhóm con cấp q của Zp*, trong đó p,q là số nguyên tố thỏa mãn q|(p-1) Ngân hàng khởi tạo 5 thành phần: g, h, g1, g2, d.
+ (g, h) ∈ Gq (generator - tuple): khóa cơng khai của ngân hàng được dùng trong sơ đồ ký ở giao thức rút tiền, x là khóa bí mật của ngân hàng.
x = logg h (h = gx )
+ (g1, g2): bộ phần tử sinh của Gq.
+ Phần tử sinh giả d ( khác g1 và g2), đảm bảo rằng định danh của người dung sẽ không bị phát hiện trong giao thức thanh toán.
3.2.3.1. Lược đồ.
1/. Khởi tạo tài khoản.
+ Alice khởi tạo ngẫu nhiên u1, u2 ∈ Zq. Tính I = g1u1 g2u2, chuyển I đến ngân hàng + Ngân hàng lưu I = g1u1 g2u2 cùng định danh của Alice và số tài khoản, nhưng ngân hàng không biết u1 và u2.
+Trường hợp Alice tiêu xài đồng tiền hai lần, ngân hàng có thể tìm ra (u1, u2) và tính được I, từ I tìm ra định danh kẻ gian lận.
Hình 5: Quá trình khởi tạo tài khoản của lược đồ Brand
u1, u2 ∈ Zq I = g1u1 g2u2 I Định danh Số tài khoản I
2/. Chứng minh đại diện tài khoản:
Khi Alice rút tiền đầu tiên phải xưng danh với ngân hàng, bằng cách chứng minh với ngân hàng là sẽ rút tiền trong tài khoản mà Alice đang sở hữu.
Phương pháp được dùng ở đây là “Chứng minh tri thức của một đại diện”. Alice phải chứng minh cho Ngân hàng rằng: Alice biết u1 và u2 cho Ngân hàng.
Quá trình thực hiện được tiến hành như sau:
1. Alice chọn ngẫu nhiên w1 và w2 ∈ Zq và gửi y = g1w1 g2w2 đến Ngân hàng. 2. Ngân hàng thử thách để kiểm tra có đúng Alice sở hữu tài khoản khơng, bằng cách chọn ngẫu nhiên Cr ∈Zq và gửi đến Alice.
3. Alice tính r1 = w1 + Cru1 và r2 = w2 + C2u2 mod q, gửi đến Ngân hàng. 4. Ngân hàng chấp nhận xác thực là đúng khi và chỉ khi.
yICr = g1r1 g2r2 trong đó I = g1u1 g2u2
Bởi vì, nếu Alice thực sự là chủ sở hữu tài khoản, thì phải biết u1, u2 (là 2 giá trị khởi tạo tài khoản ban đầu) và nếu biết được chúng thì :
yICr ≡ g1w1 g2w2 (g1u1 g2u2 ) ≡ g1w1+u1Cr g2w2 + u2Cr ≡ g1r1 g2r2
Alice (Người chứng minh) Ngân hàng ( người kiểm tra)
Biết u1 và u2 là đại diện của I = g1u1 g2u2 Chỉ biết I, g1,g2. Không biết u1 và u2 Tạo 2 số ngẫu nhiên w1 và w2 ∈Zq
Tính y = g1w1 g2w2 gửi đến Ngân hàng Nhận y, chọn ngẫu nhiên Cr ∈Zq Gửi thử thách Cr đến Alice Nhận Cr, tính:
r1 = w1 + Cru1 và r2 = w2 + C2u2 mod q Gửi đến Ngân hàng
Nhận r1, r2, kiểm tra: yICr = g1r1 g2r2
Nếu thỏa mãn: ngân hàng chấp nhận Alice biết đại diện của I ( có nghĩa là biết u1, u2)
Hình 6 : Quá trình chứng minh đại diện tài khoản của lược đồ Brand. 3/. Giao thức rút tiền.
Nếu xác thực được chấp nhận, quá trình rút tiền được tiến hành như sau:
+ Ngân hàng trừ một lượng tiền tương ứng từ tài khoản của Alice. Ngân hàng và Alice cùng tính được m = Id ( d là phần tử sinh và công khai).
Ngân hàng gửi Alice : z = mx, a = gw , b = mw
(w được chọn ngẫu nhiên từ Zq, x là khóa bí mật của Ngân hàng) + Alice chọn 3 số ngẫu nhiên s ∈Zq*; u,v ∈Zq để làm “mù” m, z, a, b.
m’ = ms = (Id)s = g1u1s g2u2s ds z’ = zs ; a’ = au gv ; b’ = bsu msv Tách ngẫu nhiên:
u1s = (x1 + x2) mod q, u2s = ( y1 + y2) mod q với s = z1 + z2 mod q
Tính A = g1x1 g2y1 dz1 ; B = m’/A = g1x2 g2y2 dz2
Alice dùng hàm băm H tính c’ = H( m’, z’, a’, b’, A). Làm “mù” c’ bằng c = c’/u mod q, gửi c đến Ngân hàng.
+ Ngân hàng ký trên c được r = xc + w mod q, gửi r cho Alice, ghi có vào khoản của Alice.
+ Alice chấp nhận nếu kiểm tra thấy gr = hca và mr = zcb và tính r’ = ru + v modq. + Lúc này, Alice có đồng tiền điện tử thực sự được đại diện bởi: A, B, Sign(A, B) với Sign ( A, B) = (z’, a’, b’,r’) là chữ ký của Ngân hàng.
Xác định giá trị đồng tiền:
Làm thế nào để có thể biết được giá trị của từng đồng tiền?
Có hai cách để giải quyết vấn đề này:
Cách 1:
Ngân hàng sử dụng một khóa cơng khai cho mỗi loại tiền. Nghĩa là, nếu có k đồng tiền khác biệt thì ngân hàng phải cơng khai k khóa cơng khai sau:
(g1 , h1)….. (gk , hk)
Cách 2:
Chọn k phần tử sinh giả (dummy generator) khác nhau được công khai d1,….., dk. Mỗi phần tử sinh được dùng để biểu hiện giá trị của mỗi đồng tiền.
Alice Ngân hàng
I = g1u1 g2u2 x: khóa bí mật
(g, h): khóa cơng khai ( h= gx)
Quá trình chứng minh đại diện
z, a, b
m∈Zq, m = Id
z = mx, a = gw , b = mw m = Id = g1u1g2u2 d, s ∈Zq*
m’ = ms = (Id)s = g1u1s g2u2s ds z’ = zs Tách ngẫu nhiên u,v ∈Zq, a’ = au gv , b’ = bsu msv c’ = H( m’, z’, a’, b’, A). c = c’/u mod q c r = xc + w mod q Kiểm tra: gr = hca và mr = zcb Tính r’ = ru + v modq. Đồng tiền: A, B, Sign(A, B) với Sign ( A, B) = (z’, a’, b’,r’)
Hình 7: Giao thức rút tiền trong lược đồ Brand 4/. Giao thức thanh toán.
Khi Alice muốn mua hàng hay sử dụng dịch vụ của Bob, trước tiên Alice cần phải gửi tiền cho Bob, q trình thanh tốn được thực hiện theo những bước sau.
1. Alice gửi tiền (A, B, Sign(A, B)) đến Bob.