Giải pháp của Lƣợc đồ Brand

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Tìm hiểu, nghiên cứu một số bài toán về an toàn thông tin trong giai đoạn rút tiền điện tử (Trang 45)

CHƢƠNG 3 MỘT SỐ VẤN ĐỀ TRONG RÚT 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”[4]

3.2.1.2. Giải pháp của 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.

+ Trong sơ đồ ký ở giao thức rút tiền, ngân hàng dùng các khoá sau: Khóa công khai là (g, h)  Gq (generator - tuple).

Khóa bí mật à x = logg h, (h = gx ) + Bộ phần tử sinh của Gq là (g1, g2).

+ Phần tử sinh giả d ( khác g1 và g2), đảm bảo rằng định danh của người dùng sẽ không bị phát hiện trong giao thức thanh toán.

a. Lƣợc đồ Brand:

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 giữ I cùng định danh của Alice và số tài khoản, nhưng ngân hàng không biết u1, 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, u2và 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 không tiết lộ thông tin”

(ZeroKnowledge Prove). Alice chứng minh cho Ngân hàng rằng: Alice biết (u1, u2). Quá trình thực hiện 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 I, bằng cách chọn ngẫu nhiên CrZq và gửi cho Alice.

3). Alice tính r1 = w1 + Cru1, r2 = w2 + C2u2 mod q, và gửi đến Ngân hàng. 4). Ngân hàng chấp nhận Aliceđã sở hữu tài khoản I khi và chỉ khi.

y ICr = 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à giá trị khởi tạo tài khoản ban đầu) và nếu biết được chúng thì:

y ICr ≡ 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: y ICr = 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 (biết u1, u2)

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. + Alice có đồng tiền điện tử đượ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:

Cách 1:

Ngân hàng sử dụng một khóa công khai cho mỗi loại tiền. Nếu có k đồng tiền khác biệt, thì ngân hàng phải có k khóa công khai: (g1 , h1),… , (gk , hk).

Cách 2:

Chọn k phần tử sinh giả (dummy generator) khác nhau 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‟)

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 phải gửi tiền cho Bob, quá trình thanh toán được thực hiện theo những bước sau.

1). Alice gửi cho Bob đồng tiền (A, B, Sign(A, B)).

A = g1x1 g2y1 dz1 , B = m’/ A = g1x2 g2y2 dz2 , Sign (A, B) = (z’, a’, b’,r’) 2). Bob thực hiện các việc sau:

+ Đầu tiên, Bob kiểm tra xem AB ≠ 1 hay không ?

Chú ý: Nếu AB = 1, nghĩa là: (g1x1g2y1 dz1 ) (g1x2g2y2 dz2 ) = 1  g1x1 + x2g2 y1 + y2 d z1 + z2 = 1, s = 0

Như vậy Ngân hàng không xác định được u1, u2 trong trường hợp “double - spending”. Nếu AB ≠ 1, thì Bob thực hiện công việc tiếp theo..

+ Bob kiểm tra chữ ký của Ngân hàng sign(A, B) có hợp lệ không ?

+ Nếu chữ ký đúng, Bob thử thách Alice bằng cách gửi cZq*, (c không cần thiết là số ngẫu nhiên, nhưng phải đảm bảo duy nhất trong mỗi lần thanh toán).

Bob tính c như sau:

c = H0 ( A, B, Ib, date/time),

(Ib là định danh của Bob, date/time là nhãn thời gian của giao dịch, H0 là hàm băm). 3). Alice phản hồi bằng việc gửi cho Bob:

r1 = x1 + c x2 mod q r2 = x1 + c y2 mod q r3 = x1 + c z2 mod q

4). Bob kiểm tra, nếu g1r1g2 r2 g3 r3 = ABc , thì chấp nhận thanh toán, vì:

g1r1g2 r2 g3r3= g1x1 + cx2g2 y1 + cy2 g3 z1 + cz2 =

Alice Bob

A, b, sign(A, B)

AB ≠ 1

Kiểm tra sign ( A, B), c Zq c r1 = x1 + cx2 mod q r2 = x2 + cy2 mod q r3 = x3 + cz2 mod q r1, r2, r3 g1r1g2 r2 g3r3 = ABc

Nếu đúng Bob chấp nhận thanh toán Hình 8: Giao thức thanh toán

5/. Giao thức gửi Tiền:

1). Bob gửi ngân hàng: thông tin thanh toán (A, B, sign(A, B)), c, r1, r2, r3. 2). Ngân hàng thực hiện:

+ Kiểm tra Chữ ký có đúng không ? Đồng tiền chưa tiêu xài trước đó ? + Kiểm tra Bob thử thách Alice và phản hồi của Alice: Có hợp lệ không ?

Bob thử thách Alice bằng giá trị c = H0 (A, B, Ib, date/time) Alice trả lời Bob bằng giá trị r1, r2, r3

b. Phân tích – đánh giá

1/. Nhận xét chung:

Lược đồ này sử dụng những lý thuyết toán học phức tạp, khó hiểu được đầy dủ. Do vậy lược đồ này không phổ biến bằng lược đồ CHAUM – FIAT – NAOR

Lược đồ không sử dụng giao thức “cut and choose” như CHAUM –FIAT-NAOR, nên không phải tạo k mẫu khác nhau cũng như không phải giữ những bản copy của phần định danh (định danh được chia làm hai phần). Ngân hàng cũng không cần kiểm tra k/2 mẫu trước khi tiến hành ký.

Độ an toàn của lược đồ Brand sẽ phụ thuộc vào độ khó của việc tính toán logarit rời rạc và dĩ nhiên sẽ an toàn hơn lược đồ sử dụng RSA.

Trong lược đồ này, định danh của người mua hàng (Alice) được ẩn danh hoàn toàn. Người bán hàng và ngân hàng hoàn toàn không biết định danh của Alice, trừ khi Alice có hành vi gian lận, tiêu một đồng tiền nhiều lần.

2/. Phát hiện định danh trong trƣờng hợp tiêu một đông tiền 2 lần:

+ Trường hợp Alice tiêu xài một đồng tiền 2 lần, thì Alice phải gửi cho Ngân hàng: Lần 1: c và r1, r2, r3 . Lần 2: c‟ và r‟1, r‟2, r‟3.

r1 =x1 + cx2 mod q r‟1 = x1 + cx‟2 mod q r2 =x2 + cy2 mod q r‟2 = x2 + cy‟2 mod q r3 =x3 + cz2 mod q r‟3 = x3 + cz‟2 mod q

+ Từ các tham số trên, ngân hàng sẽ tìm ra được định danh của kẻ gian lận: A = g1(c‟r1 – cr‟1) / (c‟-c)g2 (c‟r2 – cr‟2) / (c‟-c) g3(c‟r3 – cr‟3) / (c‟-c) B = g1(r1 – r‟1) / (c‟-c)g2 (r2 – r‟2) / (c‟-c) g3(r3 – r‟3) / (c‟-c) Mặt khác: A = g1x1 g2y1 dz1 B = g1x2 g2y2 dz2 (c‟r1 – cr‟1) = x1 mod q (r1 – r‟1) = x2 mod q (c‟r2 – cr‟2) = y1 mod q (r2 – r‟2) = y2 mod q (c‟r3 – cr‟3) = z1 mod q (r3 – r‟3) = z2 mod q + Từ công thức, Ngân hàng tính:

u1s = x1 + x2 , u2s = y1 + y2 , s = z1 + z2 Tiến hành thay x1 , y1, z1 , x2 , y2, z2 , theo kết quả trên ta được: u1s = c c c c   ' 1 r' r1 ' + c c r r   ' 1 ' 1 mod q u2s = c c cr r c   ' 2 ' 2 ' + c c r r   ' 2 ' 2 mod q s = c c cr r c   ' 3 ' 3 ' + c c r r   ' 3 ' 3 mod q u1 = ) 1 ( 3 ' ) 1 ' ( 3 ) 1 ( 1 ' ) 1 ' ( 1       c r c r c r c r mod q, u2 = ) 1 ( 3 ' ) 1 ' ( 3 ) 1 ( 2 ' ) 1 ' ( 2       c r c r c r c r mod q + Từ u1 và u2 tính được I = g1u1

g2u2 , Ngân hàng so sánh giạ trị I trong cơ sở dữ liệu đã được lưu trước đó và tìm ra định danh của kẻ gian lận.

3/. Khả năng Tấn công lƣợc đồ:

Có một kiểu tấn công trong lược đồ Brand, đó là Alice có thể tiêu một đồng tiền nhiều lần mà không bị phát hiện.

Cách tấn công này nhằm vào giao thức tạo tài khoản lúc ban đầu, khi mở tài khoản thay vì sử dụng I = g1u1 , Alice sẽ chọn I = g1u1 g2u2 , như vậy, tại giao thức rút tiền, Ngân hàng sẽ ký trên.

A = g1u1 g2u2+1 B = g1x1 g2x2

Sign( A, B) = (Z‟ = (g1u1 g2u2+1), a‟ = gwu+v

, b = (g1u1 g1u2+1)wsu+sv, r = H, (A, b,z‟, a‟, b‟)x + wu+v)

Tại giao thức rút tiền thu được e1 = de+ x1 và r2 = df + x2 ở đây (e, f) là đại diện của A = (g1e gf), e = u1s, f = (u2 +1)s.

3.2.2. Giới thiệu giải pháp cho bài toán “Chống gian lận giá trị đồng tiền”

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.

3.2.2.1. Phƣơng pháp thứ nhất: Vớ i mỗi giá tri ̣ đồng tiền, ngân hàng dùng một khóa ký riêng. ký riêng.

Ngân hàng dùng một bộ khóa (khoá 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ộ khoá khác nhau.

Ví dụ:

Đồng tiền giá trị 1$ thì dùng khoá k1 Đồng tiền giá trị 2$ thì dùng khoá k2

Đồng tiền giá trị 3$ thì dùng khoá k3

…..

Đồng tiền 50$ thì dùng khoá 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ệ.

3.2.2.2. Phƣơng pháp thứ hai: Dùng phƣơng pháp xác suất:

Để 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.

Chƣơng 4. CHƢƠNG TRÌNH DEMO 4.1 Giới thiệu 4.1 Giới thiệu

Mục tiêu: Phần mềm được viết nhằm thử nghiệm giai đoạn người mua rút một đồng tiền điện tử từ Ngân hàng về để thanh toán cho người bán.

Phần mềm được viết bằng ngôn ngữ C# chạy trực tiếp trên nền Windows Cơ sở dữ liệu được giả lập sẵn để tiện thao tác

4.2 Tính năng của phần mềm demo

Phần mềm được chia thành 2 phần giả lập cho hai phần mềm riêng biệt:

a. Phần mềm Ví điện tử: phần mềm này có chức năng giúp cho người Mua - Quản lý các đồng tiền điện tử ở dạng File đã rút về Ví

- Cho phép Xóa mù đồng tiền và thêm đồng tiền vào trong Ví

- Cho phép Rút đồng tiền ra khỏi Ví dạng File để chuyển cho người bán - Cho phép xem số dư tài khoản của mình tại Ngân hàng

- Cho phép tạo số Serial của file đồng tiền điện tử để gửi cho Ngân hàng ký mù b. Phần mềm Ngân hàng: phần mềm này có những chức năng sau

- Cho phép Người mua / Người bán xem các bộ khóa Công khai tương ứng với mỗi loại tiền điện tử

- Cho phép Người mua yêu cầu Ngân hàng ký mù lên đồng tiền của mình - Cho phép Người bán kiểm tra xem đồng tiền có bị gian lận về giá trị không

4.3 Sử dụng

Bước 1: Người mua mở chương trình lên và login vào Phần mềm Ví điện tử với Tên đăng nhập là “demo” và Mật khẩu là “123”.

Bước 2: Chuyển sang tab “Xem số dư tài khoản tại NH”  Chọn số tiền bạn muốn rút, ví dụ là “200000”  Click vào “Tạo và tải file đồng tiền”  Chọn thư mục để lưu file tiền điện tử này & đặt tên file là “raw.txt”  Click OK  Trong tiến trình này phần mềm sẽ tự sinh 1 số Serial duy nhất cho đồng tiền vừa tạo có giá trị “200000” đó, số

Serial này sẽ được hiển thị ở trong ô Textbox bên dưới hoặc có thể xem trong nội dung file tải về.

Bước 3: Người mua đăng nhập tiếp lên Phần mềm Ngân hàng với account tương tự account của Ví điện tử

Bước 4: Người mua vào tab Ký mù, tại đây Người mua Chọn đường dẫn đến file chứa đồng tiền chưa được ký “raw.txt”  chọn giá trị đồng tiền của file đó, điền Tham số ngẫu nhiên r và click vào nút “Kiểm tra và Ký”  Nếu giá trị đồng tiền cần ký nhỏ hơn Số dư tài khoản thì Phần mềm sẽ tự động bật ra 1 box cho phép Người mua chọn thư mục lưu lại file Tiền điện tử đã được ký mù  đặt tên file là “signed.txt” và click nút OK để lưu lại

 Lúc này số dư tài khoản ở cả phần mềm Ví điện tử và Ngân hàng đều tự động trừ đi 200.000 và còn lại 200.000. Ô textbox bên dưới tab “Ký mù” cũng hiển thị các thông tin về đồng tiền điện tử vừa được ký.

Bước 5: Chuyển sang tab Xem nội dung Ví ở phần mềm Ví điện tử  Để xóa mù và nhập file tiền điện tử đã được ký mù vào Ví điện tử  Nhập vào tham số r + khóa n tương ứng với giá trị đồng tiền vừa ký + chọn đường dẫn đến file “signed.txt” và click OK

 Ô textbox bên dưới hiển thị số Serial đã được Ngân hàng ký và được xóa mù. Dữ liệu trong Ví được nhập thêm 1 bản ghi là đồng tiền điện tử vừa rút về

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Tìm hiểu, nghiên cứu một số bài toán về an toàn thông tin trong giai đoạn rút tiền điện tử (Trang 45)

Tải bản đầy đủ (PDF)

(61 trang)