Tải bản đầy đủ (.docx) (20 trang)

tìm hiểu về chữ ký số

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (327.69 KB, 20 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
---  ---

BÁO CÁO BÀI TẬP LỚN
MÔN : LÝ THUYẾT MÃ HÓA THÔNG TIN
Đề tài: Tìm Hiểu Về Chữ Ký Số
Nhóm thực hiện: NHÓM 7
Lớp: KHMT3-K3

Hà Nội

1


Mục Lục

2


Lời Nói Đầu
Như chúng ta đã biết, chữ ký viết tay “thường lệ” gắn với tài liệu được dùng để
chỉ ra người đã ký nó. Chữ ký được sử dụng hàng ngày như viết thư, ký hợp
đồng…
Ở đây chúng ta tìm hiểu về chữ ký hoàn toàn khác đó là chữ ký số. Nó là
phương pháp ký thông báo được lưu dưới dạng điện tử và thông báo được ký có
thể truyền trên mạng máy tính. Chữ ký tay và chữ ký số dù có chung nhiệm vụ là
ký nhưng có sự khác biệt cơ bản giữa chúng.
Thứ nhất, về việc ký tài liệu: với chữ ký tay thì chữ ký là bộ phận vật lý của tài
liệu được ký. Tuy nhiên, chữ ký số không một cách vật lý với thông báo được ký
mà được gắn với thông báo theo logic, do đó thuật toán được dùng phải “trói ” chữ


ký với thông báo theo một cách nào đó.
Thứ hai, về việc kiểm tra: chữ ký tay được kiểm tra bằng cách so sánh nó với
những cái khác những chữ ký đã được xác thực. Ví dụ, một người ký một tấm séc
mua hàng, người bán hàng phải so sánh chữ ký trên tấm séc với chữ ký nằm sau
thẻ tín dụng để kiểm tra. Tuy nhiên, phương pháp này không an toàn lắm vì nó
tương đối dễ đánh lừa bởi chữ ký của người khác. Khác với chữ ký tay, chữ ký số
có thể được kiểm tra bằng cách dùng thuật toán kiểm tra công khai đã biết. Vì vậy
bất kì người nào đều có thể kiểm tra chữ ký số, và việc sử dụng lược đồ ký an toàn
sẽ ngăn chặn khả năng đánh lừa.

Với mong muốn ngăn chặn được sự giả mạo chữ ký .Nhiều phương pháp
được tạo ra nhằm tối ưu sự bảo mật, nổi bật hơn cả là 2 phương pháp ký số là
RSA và Elgamal ở đây chúng ta chỉ tìm hiểu về ký số Elgamal

3


Phần I: Giới Thiệu Chữ Ký Số
I. Giới thiệu
Trong cách thức truyền thống, thông báo được truyền đi trong giao dịch
thường dưới dạng các văn bản viết tay hoặc đánh máy được kèm thêm chữ ký (viết
tay) của người gửi ở bên dưới văn bản. Chữ ký đó là bằng chứng xác nhận thông
báo đúng là của người ký, tức là của chủ thể giao dịch, và nếu tờ giấy mang văn
bản không bị cắt, dán, tẩy, xóa thì tính toàn vẹn của thông báo cũng được chứng
thực bởi chữ ký đó. Chữ ký viết tay có nhiều ưu điểm quen thuộc như dễ kiểm thử,
không sao chép được, chữ ký của một người là giống nhau trên nhiều văn bản,
nhưng mỗi chữ ký gắn liền với một văn bản cụ thể, .v.v…
Khi chuyển sang cách thức truyền tin bằng phương tiện hiện đại, các thông
báo được truyền đi trên mạng truyền tin số hóa, bản thân các thông báo cũng được
biểu diễn dưới dạn số hóa, tức dưới dạng các bit nhị phân, “chữ ký” nếu có cũng ở

dưới dạng các dãy bit, thì các mối quan hệ tự nhiên kể trên không còn giữ được
nữa. Chẳng hạn, “ chữ ký ” của mỗi người gửi trên những văn bản khác nhau phải
thể hiện được sự gắn kểttách nhiệm của người gửi đối với từng văn bản đó thì tất
yếu phải khác nhau chứ không thể là những đoạn bit giống nhau như các chữ ký
giống nhau trên các văn bản thông thường. Chữ ký viết tay có thể được kiểm thử
bằng cách so sánh với nguyên mẫu, nhưng “ chữ ký ” điện tử thì không thể có “
nguyên mẫu ” để mà so sánh, việc kiểm thử phải được thực hiện bằng những thuật
toán đặc biệt. Một vấn đề nữa là việc sao chép một văn bản cùng chữ ký. Nếu là
văn bản cùng chữ ký viết tay thì dễ phân biệt bản gốc với bản sao, do đó khó mà
dùng lại được một văn bản có chữ ký thật. Còn với văn bản điện tử cùng chữ ký
điện tử thì có thể nhân bản sao chép tùy thích, khó mà phân biệt được bản gốc với
bản sao, cho nên nguy cơ dùng lại nhiều lần là có thực, do đó cần có biện pháp để
tránh nguy cơ đó.
4


II. nh ngha hỡnh thc ca ch ký s
Mt s ch kớ s l b 5( P, A, K, S, V) tho món cỏc iu kin di õy:

P: là tập hữu hạn các bức điện có thể.
A: là tập hữu hạn các chữ kí có thể .
K: không gian khoá là tập hữu hạn các khoá có thể
Với mỗi K thuộc K tồn tại một thuật toán kí Sig K S và một thuật toán
xác minh VerK V .
Mỗi SigK: P -> A và VerK :P x A -> { TRUE ,FALSE } là những hàm
sao cho mỗi bức điện x P và mỗi bức điện y A thoả mãn phơng trình sau
đây:
TRUE nếu y= Sig(x)
Ver (x,y) =
FALSE nếu y #Sig(x)

Vi mi k thuc K hm sigk v verk l cỏc hm thi than a thc. Verk s l
hm cụng khai sigk l mt. Khụng th d dng tớnh toỏn gi mo ch kớ ca
Bob trờn bc in x. Ngha l x cho trc, ch cú Bob mi cú th tớnh c y
verk = True. Mt s ch kớ khụng th an ton vụ iu kin vỡ Oscar cú th kim
tra tt c cỏc ch s y cú th cú trờn bc in x nh _ung thut toỏn ver cụng khai
cho n khi anh ta tỡm thy mt ch kớ ỳng. Vi th, nu cú thi gian. Oscar
luụn luụn cú th gi mo ch kớ ca Bob. Nh vy, ging nh trng hp h thng
mó khoỏ cụng khai, mc ớch ca chỳng ta l tỡm cỏc s ch kớ s an toan v
mt tớnh toỏn.
III. Ch ký s vi hm bm
Cỏc hm bm cú chc nng tớnh toỏn mt bn túm lc tin nhn, ú l mt
chui bit cú di cnh vn gn.
i vi mt tin nhn c th, bn túm lc tin nhn hoc giỏ tr bm cú th
c xem nh du võn tay ca nú, tc l i din duy nht ca tin nhn.
5


Chữ ký của những tin nhắn lớn, ví dụ như các tập tin đính kèm email hoặc
các tập tin đa phương tiện phải đòi hỏi một quy trình quá dài trên các máy tính
hiện hành. Không chỉ người ký phải tính toán chữ ký mà bên xác nhận cũng phải
mất một khoảng thời gian và năng lượng tương đương để xác nhận chữ ký.
Vấn đề lớn nhất ở đây là việc phải ký một tin nhắn dài bằng cách ký riêng
từng khối tin nhắn trong chuỗi. Quy trình này đưa ra một giới hạn về bảo mật
nghiêm trọng là chúng ta sẽ không bảo vệ được cho toàn bộ tin nhắn.
Do đó, vì các lý do hiệu năng cũng như bảo mật chúng ta muốn có một chữ
ký ngắn cho tin nhắn với mọi độ dài – bản tóm lược (giá trị băm, MAC, HMAC)
của tin nhắn đã ký.
Bản tóm lược (giá trị băm) có chức năng đảm bảo cho nội dung của một tin
nhắn không bị giả mạo cũng như tính toàn vẹn – tính hợp lệ của dữ liệu truyền đi
không bị thay đổi.


IV. Ưu điểm của chữ ký số
Hiện nay có rất nhiều dịch vụ bảo mật chữ ký số và dưới đây là những dịch
vụ có vai trò trọng nhất và được mong muốn sử dụng trong nhiều trình ứng dụng:

6


1. Tính bảo mật: Thông tin được lưu trữ dưới dạng bí mật mà những bên
không được ủy quyền sẽ không thể xem được.
2. Tính toàn vẹn: Các tin nhắn được đảm bảo không bị chỉnh sửa trong quá
trình truyền tải.
3. Chứng thực tin nhắn: Người gửi tin nhắn được xác thực. Một thuật ngữ
khác thay cho thuật ngữ này là chứng thực nguồn gốc dữ liệu.
4. Chống phủ nhận: Người gửi tin nhắn không thể phủ nhận việc mình đã
tạo tin nhắn đó.
Các trình ứng dụng khác nhau đòi hỏi những bộ dịch vụ bảo mật khác nhau.
Ví dụ, đối với e-mail cá nhân, có ba chức năng đầu tiên như đã nêu được mong
muốn, trong khi một hệ thống e-mail doanh nghiệp có thể yêu cầu chức năng
chống

phủ

nhận.

Một ví dụ khác, nếu chúng ta muốn bảo vệ an toàn cho các bản cập nhật phần
mềm của điện thoại di động thì mục tiêu chính có thể là tính toàn vẹn và ch ứng
thực tin nhắn vì nhà sản xuất chủ yếu muốn đảm bảo rằng chỉ có bản cập nhật gốc
mới được tải về thiết bị cầm tay đó.
Đối với tính bảo mật, các thuật toán mã hóa đối xứng được sử dụng chủ yếu

còn

thuật

toán



hóa

bất

đối

xứng

ít

được

dùng

hơn.

Để có được chức năng đảm bảo tính toàn vẹn và chứng thực tin nhắn, có thể sử
dụng chữ ký số và mã xác thực tin nhắn (viết tắt là MAC).
V. Một số thuật toán chữ ký số
Chương trình Chữ ký RSA: Chương trình chữ ký RSA dựa trên phương pháp
mã hóa bất đối xứng RSA. Tính bảo mật của nó được thiết lập dựa trên những khó
khăn thực tế về sản phẩm có hai số nguyên tố lớn (vấn đề tìm thừa số của số

7


nguyên). Từ bản mô tả đầu tiên vào năm 1978, chương trình chữ ký RSA đã trở
thành chương trình chữ ký số được sử dụng rộng rãi nhất trong thực tế.
Chữ ký số Elgamal: Chương trình chữ ký Elgamal được xuất bản vào năm
1985 dựa trên những khó khăn về việc tính toán các lô ga rít rời rác. Không giống
như RSA mà sự mã hóa và tạo chữ ký số hoạt động tương tự nhau, chương trình
chữ ký số Elgamal này khá khác biệt so với chương trình mã hóa cùng mang tên

Thuật toán DSA: Thuật toán chữ ký ElGamal bản địa được mô tả trong phần
này rất hiếm khi được sử dụng trong thực tế. Thay vào đó là một biến thể phổ biến
hơn nhiều mang tên Thuật toán chữ ký số (DSA) đã được sử dụng. Nó là một tiêu
chuẩn của chính phủ liên bang Hoa Kỳ về chữ ký số (DSS) và được đề xuất bởi
Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST). Lợi thế chính khiến chương
trình này vượt trội chương trình chữ ký ElGamal là chữ ký chỉ dài 320 bit và một
số các cuộc tấn công có thể đe dọa đến chương trình ElGamal sẽ không thể tác
động đến thuật toán DSA này.
Thuật toán Chữ ký số đường cong Elip (ECDSA): Đường cong elip có
nhiều lợi thế hơn các chương trình RSA và DL như được áp dụng trong ElGamal
hoặc DSA. Đặc biệt, trong trường hợp không có các cuộc tấn công mạnh đối với
hệ thống mã hóa đường cong elip (ECC), độ dài bit trong khoảng 160-256 bit có
thể cung cấp tính bảo mật tương đương với chương trình RSA và DL 1024-3072
bit. Độ dài ngắn hơn của ECC bit thường giúp cho thời gian xử lý nhanh hơn đồng
thời chữ ký ngắn hơn. Các bước trong tiêu chuẩn ECDSA được thiết kế liên quan
chặt chẽ đến chương trình DSA. Tuy nhiên, vấn đề logarit rời rạc của nó sẽ được
tạo một nhóm trên đường cong elip.

8



Phần II. Ký Bằng Elgamal
I Mô tả thuật toán
Sau đây ta mô tả sơ đồ chữ Elgamal đã từng giới thiệu trong bài báo năm 1985.
Bản cải tiến của sơ đồ này đã được Viện Tiêu Chuẩn và Công Nghệ Quốc Gia
Mỹ(NIST) chấp nhận làm chữ ký số. sơ đồ Elgamal (E.) được thiết kế với mục
đích dành riêng cho chữ ký số, khác sơ đồ RSA dùng cho cả hệ thống mã hóa công
khai lẫn chữ ký số.
Sơ đồ Elgamal được thiết kế với mục đích dành riêng cho chữ ký số, điểm
mạnh của nó là cùng số nguyên tố p trong cùng một sơ đồ thì với k là ngẫu nhiên
nên ta có thể có nhiều chữ ký số, không tất định giống như hệ thống mã hóa công
khai Elgamal, ở sơ đồ chữ ký RSA ta chỉ thấy trên cùng một sơ đồ với cùng một
số nguyên tố p thì chỉ có một chữ ký số. Điều này có nghĩa là có nhiều chữ ký hợp
lệ trên bức điện cho trước bất kỳ. Thuật toán toán xác minh phải có khả năng chấp
nhận bất kỳ chữ ký hợp lệ nào khi xác thực chữ ký đó.
9


S ch ký Elgamal
Cho p là số nguyên tố sao cho bài toán Logarithm rời rạc trên Z p là khó và
giả sử Zp* là phần tử nguyên thuỷ
Cho p = Zp* , A=Zp*ì Zp-1, và kí hiệu:
K={(p,,a,): a (mod p) }
Giá trị p,, là công khai, còn a là mật
Với K=(p,,a,) và với một số ngẫu nhiên (mật) k Zp-1*
Định nghĩa:
Sigk(x,k) = (,). Trong đó = k mod p
và = (x-a )k-1 mod (p-1).
Với x, Zp* và Zp-1 ta định nghĩa
Ver(x,y,) = True x (mod p).

Nếu chữ kí đợc thiết lập đúng thì xác minh sẽ thành công vì :
a k (mod p) x (mod p ).
ở đây ta dùng hệ thức: a + k x (mod p-1).
Bob tính chữ kí bằng cách dùng cả giá trị mật a (là một phần của khoá ) lẫn
số ngẫu nhiên mật k ( dùng để kí lên bức điện x ). Việc xác minh có thể thực
hiện duy nhất bằng thông tin công khai.
Vớ d minh ha
Gi s cho p = 467, = 2, a = 127, khi ú:
= a mod p = 2127 mod 467 = 132
nu Bob mun ký lờn bc in x = 100 v chn s ngu nhiờn k = 213 (chỳ ý
l UCLN(213,466) = 1 v 213-1 mod 466 = 431). Khi ú
= 2213 mod 467 = 29
v

= (100-127ì 29) 431 mod 466 = 51

bt k ai cng cú th xỏc minh ch kớ bng cỏc kim tra:
13229 2951 189 (mod 467)

10


2100 ≡ 189 (mod 467)



Vì thế chữ ký là hợp lệ.
II. Đánh giá độ an toàn
Xét độ mật của sơ đồ chữ kí E. giả sử, Oscar thử giả mạo chữ kí trên bức điện
x cho trước không biết a. nếu Oscar chọn γ và sau đó thử tìm giá trị δ tương ứng,

anh ta phải tính logarithm rời rạc log γαxβ-γ. Mặt khác, nếu đầu tiên ta chọn δ và sau
đó thử tìm γ và thử giải phương trình:
βγγδ ≡ αx (mod p)
để tìm γ. Đây là bài toán chưa có lời giải nào. Tuy nhiên, dường như nó chưa
được gắn với bài toán đã nghiên cứu kĩ nào nên vẫn có khả năng có cách nào đó để
tính δ và γ đồng thời để (δ,γ) là một chữ ký. Hiện thời không ai tìm được cách giải
song cũng không ai khẳng định được rằng nó không thể giải được.
Nếu Oscar chọn δ và γ và sau đó tự giải tìm x, anh ta sẽ phảo đối mặt với
bài toán logarithm rời rạc, tức bài toán tính log α. Vì thế Oscar không thể kí một
bức điện ngẫu nhiên bằng biện pháp này. Tuy nhiên, có 1 cách để Oscar có thể kí
lên bức điện ngẫu nhiên bằng việc chọn γ, δ và x đồng thời: giả thiết i và j là các
số nguyên 0 ≤ i ≤ p-2, 0 ≤ j ≤ p-2 và UCLN(j,p-2)=1.
Khi đó thực hiện các tính toán sau:
γ = αi βj mod p
δ = -γ j-1 mod (p-1)
x = -γ i j-1 mod (p-1)
Trong đó j-1 được tính theo modulo (p-1) (ở đây đòi hỏi j nguyên tố cùng nhau
với p-1).

11


Ta nói rằng (γ,δ) là chữ kí hợp lệ của x. điều này được chứng minh qua việc
kiểm tra xác minh:
Ta sẽ minh họa bằng 1 ví dụ:
Giống như ví dụ trước cho p = 467, α = 2, β = 132. Giả sử Oscar chọn i =
99, j = 179. Khi đó j-1 mod (p-1) = 151. Anh ta tính toán như sau:
γ = 299132197 mod 467 = 117
δ = -117×151 mod 466 = 51
x = 99 × 41 mod 466 = 331

Khi đó (117,41) là chữ ký hợp lệ trên bức điện 331 như thế đã xác minh qua
phép kiểm tra sau:
132117 11741 ≡ 303 (mod 467)


2331 ≡ 303 (mod 467)
Vì thế chữ kí là hợp lệ.
Sau đây là kiểu giả mạo thứ 2 trong đó Oscar bắt đầu bằng bức điện được Bob
ký trước đây. Giả sử (γ,δ) là chữ hợp lệ trên x. khi đó, Oscar có khả năng ký lên
nhiều bức điện khác nhau. Giả sử i, j, h là các số nguyên, 0 ≤ h,i,j ≤ p-2 và
UCLN(h γ – j δ, p-1) =1. Ta thực hiện tính toán sau:
λ = γhαiβj mod p
µ = δλ(hγ - jδ)-1 mod (p-1)
x’ = λ(hx + iδ)-1 mod (p-1)
trong đó (hγ - jδ)-1 được tính theo modulo (p-1). Khi đó dễ dàng kiểm tra điều
kiện xác minh:
12


βλ λµ ≡ αx mod p
Vì thế (λ,µ) là chữ kí hợp lệ của x’.
Cả 2 phương pháp trên đều tạo các chữ ký giả mạo hợp lệ song không xuất
hiện khả năng đối phương giả mạo chữ ký trên bức điện có sự lưa chọn của chính
họ mà không phải giải bài toán logarithm rời rạc, vì thế không có gì nguy hiểm về
độ an toàn của sơ đồ chữ ký Elgamal.
Cuối cùng, ta sẽ nêu vài cách có thể phải được sơ đồ này nếu không áp
dụng nó một cách cẩn thận (có một số ví dụ nữa về khiếm khuyết của giao thức,
một số trong đó là xét trong chương 4). Trước hết, giá trị k ngẫu nhiên được dùng
để tính chữ ký phải giữ kín không để lộ. Vì nếu k bị lộ, khá đơn giản để tính:
A = (x - kγ)δ-1 mod (p-1)

Dĩ nhiên, một khi a bị lộ thì hệ thống bị phá và Oscar có thể dễ dàng giả
mạo chữ ký.
Một kiểu dung sai sơ đồ nữa là dùng cùng giá trị k để ký hai bức điện khác
nhau. Điều này cũng tạo thuận lời cho Oscar tính a và phá hệ thống. Sau đây là
cách thực hiện. Giả sử (γ, δ1) là chữ ký trên x1 và (γ, δ2) là chữ ký trên x2. Khi đó ta
có:
βγγδ1 ≡ αx1 (mod p)


βγγδ2 ≡ αx2 (mod p)

Như vậy
αx1-x2 ≡ αδ1-δ2 (mod p)
Nếu viết γ = αk, ta nhận được phương trình tìm k chưa biết sau.
αx1-x2 ≡ αk(δ1-δ2) (mod p)
13


tương đương với phương trình:
x1 – x2 ≡ k(δ1 – δ2) (mod p-1)
Bây giờ giả sử d= UCLN(δ1 – δ2, p-1). Vì d |(p-1) và d |(δ 1 – δ2 ) nên suy ra d |
( x1 – x2). Ta định nghĩa:
x’ = (x1 – x2)/d
δ’ = (δ1 – δ2)/d
p’ = (p-1)/d
Khi đó đồng dư thức trở thành:
x’ ≡ k δ’ (mod p’)
vì UCLN(δ’,p’) = 1, nên có thể tính:
ε = (δ’)-1 mod p’
Khi đó giá trị k xác định theo modulo p’ sẽ là:

k = x’ ε mod p’
Phương trình này cho d giá trị có thể của k:
k = x’ ε + ip’ mod p
với i nào đó, 0 ≤ i ≤ d-1. Trong số d giá trị có thể có này, có thể xác định được
một giá trị đúng duy nhất qua việc kiểm tra điều kiện:
γ ≡ αk (mod p)
III. Chương trình demo
1. Giao diện chương trình

14


2. Một số hàm quan trọng
2.1 Hàm ký số
public void Kyten(int alpha, int a, int p, int k, String vanbanVao){
int beta = mod.tinhMod(alpha, a, p);
//beta=alpha^a mod p (Theo Bình phương và nhân)
int gama = mod.tinhMod(alpha, k, p);
//gama=alpha^k mod p (Theo Bình phương và nhân)
tChuky1.setText(""+(char)beta+""+(char)gama);
int kDao = dao.Calculate(k, (p-1)); //kĐảo = k^(-1) mod p (theo Euclid)
for (int i=0; iint x[] = new int[2];
15


x = doi.tachSo((int)vanbanVao.charAt(i));
//Tách số tương tự Mã hóa và giải mã Elgamal
tChuky1.append(""+(char)((p-1)-(Math.abs(x[0]-a*gama)*kDao%(p1))));
tChuky1.append(""+(char)((p-1)-(Math.abs(x[1]-a*gama)*kDao%(p1))));

//chữ ký xichma=(bảnRõ x - a*gama)*kĐảo mod (p-1)
}
}

2.2 Hàm kiểm tra chữ ký
public int kiemTraChuky(int alpha, int p, String vanbanVao, String chuky){
int demLoi=-1;
if (chuky.length()%2==0 && vanbanVao.length()==(chuky.length()/2)1){
demLoi=0;
int gama = (int)chuky.charAt(1);
int a = mod.tinhMod((int)chuky.charAt(0),gama,p);
//ký hiệu a=beta^gama mod p (Theo Bình phương và nhân)
for (int i=0; iint y[] = new int[2];
16


//ký hiệu y = a* gama^xichma mod p (Theo Bình phương và nhân)
y[0]=(a * mod.tinhMod(gama,(int)chuky.charAt((i+1)*2),p)) % p;
y[1]=(a * mod.tinhMod(gama,(int)chuky.charAt((i+1)*2+1),p)) %
p;
int x[] = new int[2];
//Ký hiệu x=gama^chữKý mod p (Theo Bình phương và nhân)
x = doi.tachSo((int)vanbanVao.charAt(i));
int x1 = mod.tinhMod(alpha, x[0], p) % p;
int x2 = mod.tinhMod(alpha, x[1], p) % p;
if (y[0]!=x1 || y[1]!=x2) demLoi++;
//So sánh y với x nếu khác nhau thì văn bản hoặc chữ ký bị lỗi
}
}else

JOptionPane.showMessageDialog(null, "Chữ ký hoặc văn bản bị lỗi.
Kiểm tra lại");
return demLoi;
}
2.3 Hàm tính Mod
public int tinhMod(int a, int x, int n){
if (x==0) {tReport.append("\nKết quả: 1"); return 1; }
if (a= public int tinhMod(int a, int x, int n){
if (x==0) {tReport.append("\nKết quả: 1"); return 1; }
if (a==0) {tReport.append("\nKết quả: 0"); return 0; }
Vector<Integer> iA = new Vector<Integer>();
Vector<Integer> iX = new Vector<Integer>();
Vector<Integer> iD = new Vector<Integer>();
17


Vector title = new Vector();
title.add("X"); title.add("A"); title.add("D");
Vector row = new Vector();
Vector rowInf = new Vector();
int d=1;
while (x != 0){
rowInf = new Vector();
rowInf.add(x);
rowInf.add(a);
//tReport.append(x+" "+a+" ");
if ((x%2)!=0) {
d=(d*(a%n));
if (d>=n) d=d-(d/n)*n;
//tReport.append(" "+d+" ");

rowInf.add(d);
}else //tReport.append("*");
rowInf.add("*");
//tReport.append("\n");
row.addElement(rowInf);
x=(x/2);
a=((a*a)%n);
}
TableModel model=new DefaultTableModel(row,title);
tableResult.setModel(model);
if (d>=n) d %= n;
else if (d<0) d+=n;
tReport.append("\nKết quả: "+d);
18


return d;
}=0) {tReport.append("\nKết quả: 0"); return 0; }
Vector<Integer> iA = new Vector<Integer>();
Vector<Integer> iX = new Vector<Integer>();
Vector<Integer> iD = new Vector<Integer>();
Vector title = new Vector();
title.add("X"); title.add("A"); title.add("D");
Vector row = new Vector();
Vector rowInf = new Vector();
int d=1;
while (x != 0){
rowInf = new Vector();
rowInf.add(x);
rowInf.add(a);

//tReport.append(x+" "+a+" ");
if ((x%2)!=0) {
d=(d*(a%n));
if (d>=n) d=d-(d/n)*n;
//tReport.append(" "+d+" ");
rowInf.add(d);
}else //tReport.append("*");
rowInf.add("*");
//tReport.append("\n");
row.addElement(rowInf);
x=(x/2);
a=((a*a)%n);
}
19


TableModel model=new DefaultTableModel(row,title);
tableResult.setModel(model);
if (d>=n) d %= n;
else if (d<0) d+=n;
tReport.append("\nKết quả: "+d);
return d;
}

Phần III: Tấn Công Hàm Ký Số

20




×