AN TOÀN DỮ LIỆU TRÊN MẠNG MÁY TÍNH
Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin việc ứng dụng các
công nghệ mạng máy tính trở nên vô cùng phổ cập và cần thiết. Công nghệ mạng máy
tính đã mang lại những lợi ích to lớn.
Sự x ấut hiện mạng Internet cho phép mọi người có thể truy cập, chia sẽ và khai
thác thông tin một cách dễ dàng và hiệu q ảu. Các công nghệ E-mail cho phép mọi
người có thể gửi thư cho người khác cũng như nhận thư ngay trên máy tính của mình.
Gần đây có công nghệ E-business cho phép thực hiện các hoạt động thương mại trên
mạng máy tính. Việc ứng dụng các mạng cục bộ trong các tổ chức, công ty hay trong
một q ốuc gia là rất phong phú. Các hệ thống chuyển tiền của các ngân hàng hàng ngày
có thể chuyển hàng tỷ đôla qua hệ thống của mình. Các thông tin về kinh tế, chính trị,
khoa học xã hội được trao đổi rông rãi.
Tuy nhiên lại nảy sinh vấn đề về an toàn thông tin. Đó cùng là một quá trình tiến
triển hợp logic: khi những vui thích ban đầu về một siêu xa lộ thông tin, bạn nhất định
nhận thấy rằng không chỉ cho phép bạn truy nhập vào nhiều nơi trên thế giới, Internet
còn cho phép nhiều người không mời mà tự ý ghé thăm máy tính của bạn.
Thực vậy, Internet có những k th ỹậut tuyệt vời cho phép mọi người truy nhập,
khai thác, chia sẻ thông tin. Những nó cũng là nguy cơ chính dẫn đến thông tin của bạn
bị hư hỏng hoặc phá h ỷu hoàn toàn.
Có những thông tin vô cùng quan trọng mà việc bị mất hay bị làm sai lệch có thể
ảnh hưởng đến các tổ chức, các công ty hay cả một q ốuc gia. Các thông tin về an ninh
q ốuc gia, bí mật kinh doanh hay các thông tin tài chính là mục tiêu của các tổ chức tình
báo nước ngoài về chính trị hay công nghiệp hoặc kẻ cắp nói chung. Bọn chúng có thể
làm mọi việc có thể để có được những thông tin quý giá này. Thử tưởng tượng nếu có
kẻ xâm nhập được vào hệ thống chuyển tiền của các ngân hàng thì ngân hàng đó sẽ
chịu những thiệt hại to lớn như mất tiền có thể dẫn tới bị phá sản. Chưa kể nếu hệ
thông thông tin an ninh q ốuc gia bị đe doạ thì hậu q ảu không thể lường trước được.
Theo số liệu của CERT(Computer Emegency Response Team - “Đội cấp cứu máy
tính”), số lượng các vụ tấn công trên Internet được thông báo cho tổ chức này là ít
hơn 200 vào năm 1989, khoảng 400 vào năm 1991, 1400 vào năm 1993, và 2241 vào
năm 1994. Những vụ tấn công này nhằm vào tất cả các máy tính có mặt trên Internet,
các máy tính của tất cả các công ty lớn như AT&T, IBM, các trường đại học, các cơ
quan nhà nước, các tổ chức quân sự, nhà băng . Một số vụ tấn công có quy mô khổng
lồ (có tới 100.000 máy tính bị tấn công). Hơn nữa, những con số này chỉ là phần nổi
của tảng băng. Một phần rất lớn các vụ tấn công không được thông báo, vì nhiều lý
do, trong đó có thể kể đến nỗi lo bị mất uy tín, hoặc đơn giản những người q ảun trị
hệ thống không hề hay biết những c ộuc tấn công nhằm vào hệ thống của họ.
Không chỉ số lượng các c ộuc tấn công tăng lên nhanh chóng, mà các phương pháp
tấn công cũng liên tục được hoàn thiện. Điều đó một phần do các nhân viên q ảun trị
hệ thống được kết nối với Internet ngày càng đề cao cảnh giác. Cũng theo CERT,
những c ộuc tấn công thời kỳ 1988-1989 chủ yếu đoán tên người sử dụng-mật khẩ
(UserID-password) hoặc sử dụng một số lỗi của các chương trình và hệ điều hành
(security hole) làm vô hiệu hệ thống bảo vệ, tuy nhiên các c ộuc tấn công vào thời gian gần đây bao gồm cả các thao tác như giả mạo địa chỉ IP, theo dõi thông tin
truyền qua mạng, chiếm các phiên làm việc từ xa (telnet hoặc rlogin).
Để vừa bảo đảm tính bảo mật của thông tin lại không làm giảm sự phát triển của
việc trao đổi thông tin q ảung bá trên toàn cầu thì một giải pháp tốt nhất là mã hoá
thông tin. Có thể hiểu sơ lược mã hoá thông tin là che đi thông tin của mình làm cho kẻ
tấn công nếu chặn được thông báo trên đường truyền thì cũng không thể đọc được và
phải có một giao thức giữa người gửi và người nhận để có thể trao đổi thông tin, đó
là các cơ chế mã và giải mã thông tin.
Ngày nay thì việc mã hoá đã trở nên phổ cập. Các công ty phần mềm lớn trên thế
giới đều có nghiên cứu và xây dựng các công cụ, th ậut toán mã hoá để áp dụng cho
thực tế. Mỗi q ốuc gia hay tổ chức đều có những cơ chế mã hoá riêng để bảo vệ hệ
thống thông tin của mình.
Một số vấn đề an toàn đối với nhiều mạng hiện nay:
Một người dùng chuyển một thông báo điện tử cho một người sử dụng khác.
Một bên thứ ba trên cùng mạng LAN này sử dụng một thiết bị nghe trộm gói để
lấy thông báo và đọc các thông tin trong đó.
Cũng trong tình h ốung trên bên thứ ba chặn thông báo, thay đổi các thành phần
của nó và sau đó lại gửi cho người nhận. Người nhận không hề nghi ngờ gì trừ
khi nhận ra thông báo đó là vô lý, và có thể thực hiện vài hành động dựa trên
các thành phần sai này đem lại lợi ích cho bên thứ ba.
Người dùng log vào một server mà không sử dụng mật khẩu được mã hoá. Một
người khác đang nge trộm trên đường truyền và bắt được mật khẩu logon của
người dùng, sau đó có thể truy nhập thông tin trên server như người sử dụng.
Một người q ảun trị hệ thống không hiểu về khía cạnh an toàn và yêu cầu của
hệ thống và vô tình cho phép người dùng khác truy nhập vào thư mục chứa các
thông tin hệ thống. Người dùng phát hiện ra họ có thể có được các thông tin hệ
thống và có thể dùng nó phục vụ cho loựi ích của mình.
85 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2077 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài An toàn dữ liệu trên mạng máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ồ ữ ượ ả
trong FIPS 186, hàm băm này t o ra m t giá tr s nguyên 160 bit đ c tr ng cho m tạ ộ ị ố ặ ư ộ
thông đi p, đi u này làm h n ch m t trong các giá tr tham s c a DSS ph i là 160ệ ề ạ ế ộ ị ố ủ ả
bit. Ngoài ra, chu n này yêu c u vi c sinh ch ký ph i s d ng m t khoá riêng choẩ ầ ệ ữ ả ử ụ ộ
m i ng i ký, ng c l i đ xác nh n ch ký, ng i xác nh n ph i có m t khoá côngỗ ườ ượ ạ ể ậ ữ ườ ậ ả ộ
khai t ng ng v i khoá riêng c a ng i g i. ươ ứ ớ ủ ườ ử
Ch ký DSAữ
6.6.2 Các gi i thu t c b n c a DSSả ậ ơ ả ủ
a. Gi i thu t sinh khoáả ậ
M i m t th c th t o m t khoá công khai và m t khoá m t t ng ng theo cáchỗ ộ ự ể ạ ộ ộ ậ ươ ứ
sau:
• Ch n m t s nguyên t q sao cho 2ọ ộ ố ố 159 < q < 2160
• Ch n m t s nguyên t p sao cho 2ọ ộ ố ố 511+64t < p < 2512+64t đó t [0,8] ở
• Ch n s α nh sau: ọ ố ư
• Ch n g là m t s nguyên b t kỳ nh h n p, α = gọ ộ ố ấ ỏ ơ (p-1)/q mod p
GV. Lê Đ c Nh ngắ ườ Trang 52
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
• α khác 1
• Ch n s nguyên a sao cho : 1 ≤ a ≤ q - 1 ọ ố
• Tính β = α a mod p
• Khoá riêng c a th c th là a, khoá công khai là b (p,q, α, β) ủ ự ể ộ
b. Gi i thu t sinh ch kýả ậ ữ
Khi c n sinh ch ký cho m t thông đi p x th c th ph i làm nh ng vi c nh sau:ầ ữ ộ ệ ự ể ả ữ ệ ư
• Ch n m t s nguyên m t k, 0 < k < q - 1 ọ ộ ố ậ
• Tính γ = (ak mod p) mod q.
• Tính k-1 mod q.
• Tính δ = k-1(h(x) + aγ) mod q
• Ch ký c a th c th cho x là c p (δ, γ) ữ ủ ự ể ặ
c. Gi i thu t xác nh n ch kýả ậ ậ ữ
Khi c n xác ch ký cho m t thông đi p m th c th ph i làm nh ng vi c nh sau:ầ ữ ộ ệ ự ể ả ữ ệ ư
• Dành l y khoá công khai c a th c th ký (p,q, α, β)ấ ủ ự ể
• N u đi u ki n : 0 <ế ề ệ δ, γ < q không tho mãn thì t ch i ch ký ả ừ ố ữ
• Tinh w = δ -1 mod q và h(x)
• Tính e1 = w.h(x) mod q và e2 = γw mod q
• Tính v = (αe1 βe2 mod p) mod q
• N u v = γ thì ch p nh n ch ký ngoài ra thì t ch i ế ấ ậ ữ ừ ố
d. Tóm t t l c đ ch ký s DSSắ ượ ồ ữ ố
Vi du :́ ̣ Gia s q =101, p = 78q + 1 =7879. ̉ ử 3 la phân t nguyên thuy trong Z̀ ̀ ử ̉ 7879 nên ta
co thê lây: α = 3́ ̉ ́ 78 mod 7879 =170
Gia s a =75, khi đo β = α̉ ử ́ a mod 7879 = 4576
Muôn ki b c điên x = 1234, ta chon sô ngâu nhiên k =50, vi thê có ḱ ́ ứ ̣ ̣ ́ ̃ ̀ ́ -1 mod 101 = 99
khi đo có :́
γ = (17030 mod 7879) mod 101 = 2518 mod 101 = 94
Va ̀ δ = (1234 +75*94)*99 mod 101 = 96
Ch ki (94, 97) trên b c điên 1234 đ c xac minh băng cac tinh toan sau:ữ ́ ứ ̣ ượ ́ ̀ ́ ́ ́
d-1 = 97-1 mod 101 =25
e1 = 1234 * 25mod 101 = 45
e2 = 94 * 25 mod 101 =27
Có (17045 456727 mod 7879) mod 101 = 2518 mod 101 = 94 vi thê ch ki h p lê.̀ ́ ữ ́ ợ ̣
6.6.3 Tính ch t c a ch ký c a DSSấ ủ ữ ủ
a. Ð an toànộ : Đ an toàn c a ch ký ph thu c vào đ bí m t c a khoá riêng.ộ ủ ữ ụ ộ ộ ậ ủ
Ng i s d ng ph i đ c b o v tr c v khóa riêng c a mình. N u khoá riêng đ mườ ử ụ ả ượ ả ệ ướ ề ủ ế ả
b o an toàn tuy t đ i thì ch ký cũng có m c đ an toàn h u nh tuy t đ i. M t khác,ả ệ ố ữ ứ ộ ầ ư ệ ố ặ
GV. Lê Đ c Nh ngắ ườ Trang 53
v i khoá công khai là công khai, ch ký DSS là an toàn khi t khoá công khai không thớ ữ ừ ể
tìm đ c khoá riêng, Th t v y, ta có:ượ ậ ậ
Cho p là m t s nguyên t r t l n, ph ng trình toán h c sau là không th gi iộ ố ố ấ ớ ươ ọ ể ả
đ c: y = aượ x mod p (1) v i y, a = gớ (p-1)/q và khác 1. Ð xem xét đi u này tr c h t chúngể ề ướ ế
ta nh n xét ph ng trình (1) có nghi m x duy nh t thu c kho ng [1,q]. Th t v y giậ ươ ệ ấ ộ ả ậ ậ ả
s có hai nghi m là xử ệ 1 và x2 t (1) ta có:ừ
y = ax1 mod p và y = ax2 mod p.
Không m t tính t ng quát gi s xấ ổ ả ử 1 < x2 t đây suy ra :ừ
ax1 chia h t cho p (không tho mãn do p nguyên t )ế ả ố
T n t i k nh h n p sao cho aồ ạ ỏ ơ k ≡ 1 (mod p). V i giá tr a có d ng a = gớ ị ạ (p-1)/q thì đi uề
này không th x y ra khi g < p.ể ả
Trong nhi u tr ng h p, thông đi p có th mã và gi i mã ch m t l n nên nó phùề ườ ợ ệ ể ả ỉ ộ ầ
h p cho vi c dùng v i h m t b t kì (an toàn t i th i đi m đ c mã). Song trên th cợ ệ ớ ệ ậ ấ ạ ờ ể ượ ự
t , nhi u khi m t b c đi n đ c dùng làm m t tài li u đ i ch ng,ế ề ộ ứ ệ ượ ộ ệ ố ứ ch ng h n nhẳ ạ ư
b n h p đ ng hay m t chúc th và vì th c n xác minh ch kí sau nhi u năm k tả ợ ồ ộ ư ế ầ ữ ề ể ừ
lúc b c đi n đ c kí. B i v y, đi u quan tr ng là có ph ng án d phòng liên quanứ ệ ượ ở ậ ề ọ ươ ự
đ n s an toàn c a s đ ch kí khi đ i m t v i h th ng mã. ế ự ủ ơ ồ ữ ố ặ ớ ệ ố
Vì s đ Elgamal không an toàn h n bài toán logarithm r i r c nên c n dùngơ ồ ơ ờ ạ ầ
modulo p l n ch ng h n t 512 bít tr lên. Tuy nhiên đ dài ch ký theo s đ Elgamalớ ẳ ạ ừ ở ộ ữ ơ ồ
là g p đôi s bit c a p mà v i nhi u ng d ng dùng th thông minh thì c n ch kíấ ố ủ ớ ề ứ ụ ẻ ầ ữ
ng n h n nên gi i pháp s a đ i là: m t m t dùng p v i đ dài bi u di n t 512 bítắ ơ ả ử ổ ộ ặ ớ ộ ể ễ ừ
đ n 1024 bít, m t khác trong ch ký (γ, δ), các s γ, δ có đ dài bi u di n ng n, ch ngế ặ ữ ố ộ ể ễ ắ ẳ
h n là 160 bít - khi đó đ dài ch ký là 320 bít. Đi u này th c hi n b ng cách dùngạ ộ ữ ề ự ệ ằ
nhóm con Cyclic Zq* c a Zủ p* thay cho chính b n thân Zả p*, do đó m i tính toán v nọ ẫ
đ c th c hi n trong Zượ ự ệ p* nh ng d li u và thành ph n ch ký l i thu c Zư ữ ệ ầ ữ ạ ộ q*.
b. Tính h p lợ ệ : tính h p l c a ch ký DSAợ ệ ủ ữ d a trên 2 đ nh lý sau:ự ị
Đ nh lý:ị Cho p, q là 2 s nguyên t tho mãn đi u ki n q \ (p-1). h là m t số ố ả ề ệ ộ ố
nguyên d ng b t kỳ tho mãn h < p. N u :ươ ấ ả ế
g ≡ h(p-1)/q mod p thì gq ≡ 1 mod p.
Th t v y gậ ậ q ≡ (h(p-1)/q)q ≡ h(p-1) mod p ≡ 1 mod p (theo đ nh lý Ferma nh ).ị ỏ
Đ nh lý:ị V i g, p, q xác đ nh nh trên ta luôn có:ớ ị ư
N u m ≡ n mod p thì gế m ≡ gn mod p. Th t v y không m t tính t ng quát ta đ tậ ậ ấ ổ ặ
m=n+kq. Thì gm ≡ g n + kq ≡ (gn mod p). (gkq mod p) ≡ gn mod p => đi u ph i ch ng minh.ề ả ứ
c. Nh c đi m:ượ ể Khi DSS đ c đ xu t năm 1991, đã có m t vài ý ki n ch tríchượ ề ấ ộ ế ỉ
đ c đ a ra. M t ý ki n cho r ng, vi c x lý l a ch n c a NIST là không công khai.ượ ư ộ ế ằ ệ ử ự ọ ủ
Tiêu chu n đã đ c C c An ninh Qu c gia (NSA) phát tri n mà không có s tham giaẫ ượ ụ ố ể ự
c a khôi công nghi p M . Còn nh ng ch trích v m t kĩ thu t thì ch y u là v kíchủ ệ ỹ ữ ỉ ề ặ ậ ủ ế ề
th c modulo p b c đ nh = 512 bít. Nhi u ng i mu n kích th c này có th thayướ ị ố ị ề ườ ố ướ ể
đ i đ c n u c n, có th dùng kích c l n h n. Ðáp ng nh ng đòi h i này, NIST đãổ ượ ế ầ ể ỡ ớ ơ ứ ữ ỏ
ch n tiêu chu n cho phép có nhi u c modulo, nghĩa là c modulo b t kì chia h t choọ ẩ ề ở ỡ ấ ế
64 trong ph m vi t 512 đ n 1024 bít.ạ ừ ế
M t phàn nàn khác v DSS là ch kí đ c t o ra nhanh h n vi c xác minh nó.ộ ề ữ ượ ạ ơ ệ
Trong khi đó, n u dùng RSA làm s đ ch kí v i s mũ xác minh công khai nh h nế ơ ồ ữ ớ ố ỏ ơ
GV. Lê Đ c Nh ngắ ườ Trang 54
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
(ch ng h n = 3) thì có th xác minh nhanh h n nhi u so v i vi c l p ch kí. Ði u nàyẳ ạ ể ơ ề ớ ệ ậ ữ ề
d n đ n hai v n đ liên quan đ n nh ng ng d ng c a s đ ch kí:ẫ ế ấ ề ế ữ ứ ụ ủ ơ ồ ữ
B c đi n ch đ c kí m t l n, song nhi u khi l i c n xác minh ch kí nhi u l nứ ệ ỉ ượ ộ ầ ề ạ ầ ữ ề ầ
trong nhi u năm. Ði u này l i g i ý nhu c u có thu t toán xác minh nhanh h n.ề ề ạ ợ ầ ậ ơ
Nh ng ki u máy tính nào có th dùng đ kí và xác minh? Nhi u ng d ng, ch ngữ ể ể ể ề ứ ụ ẳ
h n các th thông minh có kh năng x lý h n ch l i liên l c v i máy tính m nhạ ẻ ả ử ạ ế ạ ạ ớ ạ
h n. Vi th có nhu c u nh ng thi t k m t s đ đ có th c hi n trên th m t vài tínhơ ế ầ ư ế ế ộ ơ ồ ể ự ệ ẻ ộ
toán. Tuy nhiên, có nh ng tình hu ng c n h th ng mình t o ch kí, trong nh ng tìnhữ ố ầ ệ ố ạ ữ ữ
hu ng khác l i c n th thông minh xác minh ch kí. Vì th có th đ a ra gi i pháp xácố ạ ầ ẻ ữ ế ể ư ả
đ nh đây.ị ở
Sự đáp ng c a NIST đ i v i yêu c u v s l n t o xác minh ch kí th c raứ ủ ố ớ ầ ề ố ầ ạ ữ ự
không có v n đ gì ngoài yêu c u v t c đ , mi n là c hai th th c hi n đ nhanh.ấ ề ầ ề ố ộ ễ ả ể ự ệ ủ
6.6.4 L a ch n s đ ký kh thiự ọ ơ ồ ả
Trong các s đ ch ký đi n t chúng ta quy t đ nh ch n cài đ t 2 s đ ch ký làơ ồ ữ ệ ử ế ị ọ ặ ơ ồ ữ
DSA và RSA b i vì m t s nguyên nhân sauở ộ ố :
C hai s đ này đ u đ c chính phả ơ ồ ề ượ ủ M thông qua trong Chu n ch kí s (DSS).ỹ ẩ ữ ố
C hai gi i thu t RSA và DSA đ u đ c công b trong H S trong liên bang (FIPS)ả ả ậ ề ượ ố ồ ơ
vào ngày 19/5/94 và đ c đ a ra làm chu n chính th c c a ch ký đi n t vàoượ ư ẩ ứ ủ ữ ệ ử
1/12/94 m c dù nó đã đ c đ xu t t 8/91. ặ ượ ề ấ ừ
Các s đ ch ký này đ u là các s đ ch ký d a trên các ph ng pháp mã hoáơ ồ ữ ề ơ ồ ữ ự ươ
khóa khóa công khai và đ u có đ b o m t r t cao.ề ộ ả ậ ấ
Các b s li u đ ki m nghi m s đúng đ n trong vi c cài đ t các ch ký này đ uộ ố ệ ể ể ệ ự ắ ệ ặ ữ ề
đ c công khai. N u trong quá trình th nghi m các ch ký này đ u đ m b o đúngượ ế ử ệ ữ ề ả ả
v i b s li u thì ch ký đ c coi là an toàn.ớ ộ ố ệ ữ ượ
C hai s đ ch ký đ u có th chuy n đ i t các ch ký kèm thông đi p thànhả ơ ồ ữ ề ể ể ồ ừ ữ ệ
ch ký khôi ph c thông đi p không m y khó khăn v i vi c tích h p thêm các hàm cóữ ụ ệ ấ ớ ệ ợ
đ d R (ộ ư Redundancy Function).
Trong th c t , khi đ a ra h th ng CA server, phía đ i tác quy t đ nh l a ch n sự ế ư ệ ố ố ế ị ự ọ ơ
đ ch ký DSA là ch ký chính th c cho toàn b các giao d ch.ồ ữ ữ ứ ộ ị
Th i gian xác nhân ch ký c a hai ch ký này đ u ng n và ch p nh n đ c trongờ ữ ủ ữ ề ắ ấ ậ ượ
môi tr ng m ng công c ng.ườ ạ ộ
6.7T n công ch ký đi n tấ ữ ệ ử
Khi nói đ n ch ký đi n t , chúng ta luôn m c tiêu an toàn lên hàng đ u. M t chế ữ ệ ử ụ ầ ộ ữ
ký đi n t ch th c s đ c áp d ng trong th c t nêu nh nó đ c ch ng minh làệ ử ỉ ự ự ượ ụ ự ế ư ượ ứ
không th gi m o. M c tiêu l n nh t c a k t n công các s đ ch ký chính là ể ả ạ ụ ớ ấ ủ ẻ ấ ơ ồ ữ giả
m o ch ký; ạ ữ đi u này có nghĩa là k t n công s sinh ra đ c ch ký c a ng i kýề ẻ ấ ẽ ượ ữ ủ ườ
lên thông đi p mà ch ký này s đ c ch p nh n b i ng i xác nh n. Trong th c tệ ữ ẽ ượ ấ ậ ở ườ ậ ự ế
các hành vi t n công ch ký đi n t h t s c đa d ng, đ d dàng phân tích m t s đấ ữ ệ ử ế ứ ạ ể ễ ộ ơ ồ
ch ký là an toàn hay không ng i ta ti n hành ki m nghi m đ an toàn c a ch kýữ ườ ế ể ệ ộ ủ ữ
tr c các s t n công sau:ướ ự ấ
• Total break: M t k gi m o không nh ng tính đ c thông tin v khoá riêngộ ẻ ả ạ ữ ượ ề
(private key) mà còn có th s d ng m t thu t toán sinh ch ký t ng ng t oể ử ụ ộ ậ ữ ươ ứ ạ
ra đ c ch ký cho thông đi p.ượ ữ ệ
GV. Lê Đ c Nh ngắ ườ Trang 55
• Selective forgert: K t n công có kh năng t o ra đ c m t t p h p các ch kýẻ ấ ả ạ ượ ộ ậ ợ ữ
cho m t l p các thông đi p nh t đ nh, các thông đi p này đ c ký mà khôngộ ớ ệ ấ ị ệ ượ
c n ph i có khoá m t c a ng i ký.ầ ả ậ ủ ườ
• Existential forgery: K t n công có kh năng gi m o ch ký cho m t thôngẻ ấ ả ả ạ ữ ộ
đi p, k t n công không th ho c có r t ít kh năng ki m soát thông đi p đ cệ ẻ ấ ể ặ ấ ả ể ệ ượ
gi m o này.ả ạ
Ngoài ra, h u h t các ch ký đi n t đ u d a vào c ch mã hoá khoá công khai,ầ ế ữ ệ ử ề ự ơ ế
các ch ký đi n t d a trên c ch này có th b t n công theo các ph ng th c sau:ữ ệ ử ự ơ ế ể ị ấ ươ ứ
• Key-only attacks: K t n công ch bi t khóa chung c a ng i ký.ẻ ấ ỉ ế ủ ườ
• Message attacks: đây k t n công có kh năng ki m tra các ch ký khác nhauở ẻ ấ ả ể ữ
có phù h p v i m t thông đi p có tr c hay không. Ðây là ki u t n công r tợ ớ ộ ệ ướ ể ấ ấ
thông d ng trong th c t nó th ng đ c chia làm 3 l p:ụ ự ế ườ ượ ớ
o Known-message attack: K t n công có ch ký cho m t l p các thôngẻ ấ ữ ộ ớ
đi p.ệ
o Chosen-message attack: K t n công dành đ c các ch ký đúng choẻ ấ ượ ữ
m t danh sách các thông đi p tr c khi ti n hành ho t đ ng phá hu chộ ệ ướ ế ạ ộ ỷ ữ
ký, cách t n công này là non-adaptive (không mang tính phù h p) b i vìấ ợ ở
thông đi p đ c ch n tr c khi b t kỳ m t ch ký nào đ c g i đi.ệ ượ ọ ướ ấ ộ ữ ượ ử
o Adaptive-chosen message attack: K t n công đ c phép s d ng ng iẻ ấ ượ ử ụ ườ
ký nh là m t bên đáng tin c y, k t n công có th yêu c u ch ký choư ộ ậ ẻ ấ ể ầ ữ
các thông đi p mà các thông đi p này ph thu c vào khoá công khai c aệ ệ ụ ộ ủ
ng i ký, nh v y k t n công có th yêu c u ch ký c a các thôngườ ư ậ ẻ ấ ể ầ ữ ủ
đi p ph thu c vào ch ký và thông đi p dành đ c tr c đây và qua đóệ ụ ộ ữ ệ ượ ướ
tính toán đ c ch ký.ượ ữ
6.8K t lu nế ậ
V i s phát tri n mang tính toàn c u c a m ng Internet, con ng i có th giao ti pớ ự ể ầ ủ ạ ườ ể ế
d dàng trong m t c ng đ ng r ng l n. Tuy nhiên đ i v i các giao d ch mang tínhễ ộ ộ ồ ộ ớ ố ớ ị
nh y c m, c n ph i có c ch đ m b o an toàn trong phiên giao d ch đó. C n thi tạ ả ầ ả ơ ế ả ả ị ầ ế
h n c đó là m i bên c n xác đ nh chính xác ng i mình đang giao ti p có đúng là đ iơ ả ỗ ầ ị ườ ế ố
tác mong đ i hay không. Chúng ta đã đ c p đ n hai k thu t chính trong an toàn thôngợ ề ậ ế ỹ ậ
tin đó là mã hóa và ký s . Hai k thu t này cũng đ c áp d ng ph n nào trong vi c xácố ỹ ậ ượ ụ ầ ệ
th c đ i tác trong m i phiên giao d ch.ự ố ỗ ị
V k thu t mã hóa, có hai ph ng pháp: mã hóa đ i x ng và mã hóa khóa khóaề ỹ ậ ươ ố ứ
công khai. Mã hóa đ m b o an toàn v thông tin giao ti p nh ng không đ m b o li uả ả ề ế ư ả ả ệ
thông tin có b gi m o ho c có b m o danh hay không. V n đ ch y u n m vi cị ả ạ ặ ị ạ ấ ề ủ ế ằ ở ệ
qu n lý khóa mã hóa và gi i mã c hai ph ng pháp mã hóa.ả ả ở ả ươ
Đ i v i ph ng pháp ký s , d a vào ch ký cùng c p khóa riêng và công khai,ố ớ ươ ố ự ữ ặ
chúng ta có th xác đ nh đ c chính xác đ i tác trong giao d ch. Chúng ta cũng đã tìmể ị ượ ố ị
hi u hai lo i ch ký : ch ký kèm thông đi p và ch ký sinh thông đi p cùng ba s để ạ ữ ữ ệ ữ ệ ơ ồ
ký đ c ch p nh n và s d ng r ng rãi: RSA, Elgamal và DSS. ượ ấ ậ ử ụ ộ
Có m t v n đ đ t ra đ i v i ch ký s , li u chúng ta có đ m b o chính xác chộ ấ ề ặ ố ớ ữ ố ệ ả ả ữ
ký ho c khóa khóa công khai là thu c đ i tác hay không. Có r t nhi u cách t n côngặ ộ ố ấ ề ấ
vào ch ký s , trong đó ph bi n là ph ng pháp m o danh ch ký. Gi i pháp kh cữ ố ổ ế ươ ạ ữ ả ắ
ph c đ a ra là s d ng ch ng ch s cho khóa khóa công khai nh m đ m xác th c tínhụ ư ử ụ ứ ỉ ố ằ ả ự
GV. Lê Đ c Nh ngắ ườ Trang 56
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
đúng đ n c a đ i tác trong giao d ch. Các v n đ liên quan ch ng ch khóa khóa côngắ ủ ố ị ấ ề ứ ỉ
khai đ c đ c p trong ph n khác.ượ ề ậ ầ
GV. Lê Đ c Nh ngắ ườ Trang 57
CH NG 7 ƯƠ
NG D NG C A AN TOÀN THÔNG TIN VÀ Ứ Ụ Ủ
CÁC CH Đ TH O LU NỦ Ề Ả Ậ
7.1 Các ng d ng c a an toàn thông tinứ ụ ủ
• Data Storage
• Prevent disclosure
• Password files
• Backup tapes
• Bulk
• Telecommunications
• Prevent disclosure
• Data transmission
• STU
• Message authentication
• Detect fraudulent insertion
• Detect fraudulent deletion
• Detect fraudulent modification
• Detect replay
• Digital Signature
• Source Verification
• Non-Repudiation
• EFT systems
• E-Mail
• Communication links
• ……
7.2 Các ch đ th o lu nủ ề ả ậ
Các sinh viên đăng ký các ch đ báo cáo. N p và báo cáo vào tu n th 10 tr điủ ề ộ ầ ứ ở
(trong kho ng 3 tu n). B n nào không báo cáo, yêu c u làm toàn b các bài t p v mãả ầ ạ ầ ộ ậ ề
hóa, ký s đã đ c d y, hôm báo cáo đ n n p và ki m tra. Các b n có th t đ xu tố ượ ạ ế ộ ể ạ ể ự ề ấ
ch đ cho nhóm c a mình. V n đ đ c các b n đ a ra ph i có liên quan t i v n đủ ề ủ ấ ề ượ ạ ư ả ớ ấ ề
Mã hóa và An toàn thông tin.
1. Mã dòng (stream ciphers)
2. Thám mã đ i v i h mã hóa c đi nố ớ ệ ổ ể
3. T n công h mã hóa DESấ ệ
4. H m t mã AESệ ậ
GV. Lê Đ c Nh ngắ ườ Trang 58
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
5. RC2 & RC4
6. H mã hóa Blowfish và ng d ngệ ứ ụ
7. Mã hóa khóa công khai và m t s ng d ng th c tộ ố ứ ụ ự ế
8. Ch ký m t l nữ ộ ầ
9. Ch ký không ch i cãiữ ố
10.Ch ký fail-stopữ
11. Ch ng ch s và ng d ng ứ ỉ ố ứ ụ
12. Giao th c b o m t SSLứ ả ậ
13. Giao th c b o m t TLSứ ả ậ
14. Tìm hi u v hàm bămể ề
15. Tìm hi u v nhãn th i gian ể ề ờ
16. Tìm hi u v s đ đ nh danhể ề ơ ồ ị
17. V n đ qu n lý khóaấ ề ả
18. V n đ Phân ph i khóa và th a thu n khóaấ ề ố ỏ ậ
19. V n đ Mã xác th cấ ề ự
20. H m t mã d a trên đ ng cong Eliptic (Elgamal)ệ ậ ự ườ
21.…..
GV. Lê Đ c Nh ngắ ườ Trang 59
TÀI LI U THAM KH OỆ Ả
TÀI LI U TI NG VI TỆ Ế Ệ
[1] Phan Đình Di u. Lý thuy t m t mã và an toàn thông tin. Năm 1999 – Đ i h cệ ế ậ ạ ọ
Qu c Gia Hà N i.ố ộ
[2] Đ Nh H i. Lu n văn Nghiên c u m t s v n đ thông tin trong ho t đ ngỗ ư ả ậ ứ ộ ố ấ ề ạ ộ
th ng m i đi n t . Năm 2002 – Đ i h c Qu c Gia Hà N i.ươ ạ ệ ử ạ ọ ố ộ
[3] Tr nh H ng H i. Lu n văn H th ng k t n i thanh toán đi n tị ồ ả ậ ệ ố ế ố ệ ử
PaymentConnect. Năm 2003. Đ i h c Qu c Gia Hà N i.ạ ọ ố ộ
[4] Nguy n Văn V . Phân tích thi t k các h th ng thông tin hi n đ i và h ngễ ỵ ế ế ệ ố ệ ạ ướ
đ i t ng. Nhà xu t b n Th ng Kê năm 2002.ố ượ ấ ả ố
[5] Công ty CDIT. H th ng c ng thanh toán Payment Gateway. Tài li u gi i thi uệ ố ổ ệ ớ ệ
c ng thanh toán đi n t năm 2003.ổ ệ ử
TÀI LI U TI NG ANHỆ Ế
[6] Jalal Feghhi & Jalil Feghhi & Peter Williams. Digital Certificates – Applied
Internet Sercurity. Copyright 1999 by Addison Webley Longman. Inc.
[7] Simson Garfulkerl and Gerne Spanford. Web Security and Commerce. Copyright
June 1997 by O’Reilly & Associates. Inc.
[8] Lincoln D.Stein. Web Security Step by Step Reference Guide. Copyright 1998 by
Addison Webley Longman. Inc.
[9] Stinson. D.R.(Douglast Robert). Cryptography: Theory and Partice. 1995 by CRC
Press. Inc.
[10] G. Winfield Treese & Lawrence C. Stewart. Design System for Internet
Commerce. Copyright 1998 by Addison Webley Longman. Inc.
[11] U.S. Department Of Commerce/National Institute of Standards and Technology.
Digital Signature Standard (DSS). Federal Information Processing Standards Publication
1998 December 15
[12] MICHAEL WELSCHENBACH . Cryptography in C and C++. Apress 2001.
[13] Douglas Stinson. Cryptography: Theory and Practice. CRC Press, CRC Press
LLC.
[14] Alfred J. Menezes & Paul C. van Oorschot & Scott A. Vanstone. HANDBOOK
of APPLIED CRYPTOGRAPHY. MIT Press.
[15] Wenbo Mao Hewlett-Packard Company . Modern Cryptography: Theory and
Practice. Prentice Hall PTR July 25, 2003.
CÁC TRANG WEB
[16]
[17]
GV. Lê Đ c Nh ngắ ườ Trang 60
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
PH L C: MÃ NGU NỤ Ụ Ồ
7.1Mã hóa d ch chuy nị ể
#include
#include
#include
#include
#include
class MH_Dich_Chuyen{
private :
int K,length; // Khoa K
char RC[255],MC[255]; // Ro Chu, Ma Chu
int RS[255],MS[255]; // Ro So, Ma So
public :
void Encryp(); // Ham Ma Hoa
void De_Encryp(); // Ham Giai Ma
private :
void Input_Key(); // Nhap Khoa K
void Input_RC(); // Nhap Ro Chu
void Input_MC(); // Nhap Ma Chu
void Output_RC(); // Xuat Ro Chu
void Output_MC(); // Xuat Ma Chu
void Output_RS(); // Xuat Ro So
void Output_MS(); // Xuat Ma So
// Cac ham lap ma
void Process_RC_RS(); // Chuyen Ro Chu ==> Ro So
void Process_RS_MS(); // Chuyen Ro So ==> Ma So
void Process_MS_MC(); // Chuyen Ma So ==> Ma Chu
// Cac ham giai ma
void Process_MC_MS(); // Chuyen Ma Chu ==> Ma So
void Process_MS_RS(); // Chuyen Ma So ==> Ro So
void Process_RS_RC(); // Chuyen Ro So ==> Ro Chu
};
// Cac Ham Nhap Du
Lieu /////////////////////////////////////////
void MH_Dich_Chuyen::Input_Key(){
cout <<"Nhap Khoa K : ";
cin >>K;
}
void MH_Dich_Chuyen::Input_RC(){
cout <<"Nhap Ban Ro Chu : ";
cin >>RC;
length = strlen(RC);
}
void MH_Dich_Chuyen::Input_MC(){
cout <<"Nhap Ban Ma Chu : ";
cin >>MC;
length = strlen(MC);
}
// Cac Ham Xuat Du
Lieu //////////////////////////////////////////
void MH_Dich_Chuyen::Output_RC(){
unsigned int i = 0;
cout <<"Ban Ro Chu : ";
GV. Lê Đ c Nh ngắ ườ Trang 61
for (i=0;i<length;i++){
cout <<" "<<RC[i];
}
}
void MH_Dich_Chuyen::Output_MC(){
cout <<"Ban Ma Chu : ";
unsigned int i = 0;
cout <<"Ban Ma Chu : ";
for (i=0;i<length;i++){
cout <<" "<<MC[i];
}
}
void MH_Dich_Chuyen::Output_RS(){
unsigned int i=0;
cout <<"Ban Ro So : ";
for (i=0;i<length;i++){
cout <<" "<<RS[i];
}
cout <<"\n";
}
void MH_Dich_Chuyen::Output_MS(){
unsigned int i=0;
cout <<"Ban Ma So : ";
for (i=0;i<length;i++){
cout <<" "<<MS[i];
}
cout <<"\n";
}
// Cac Ham Chuyen Doi Tu Ro Chu Sang Ma
Chu ///////////////////////
void MH_Dich_Chuyen::Process_RC_RS(){
unsigned int i=0;
for (i=0;i<strlen(RC);i++){
RS[i]=tolower(RC[i])-'a';
}
}
void MH_Dich_Chuyen::Process_RS_MS(){
unsigned int i=0;
for (i=0;i<strlen(RC);i++){
MS[i]=(RS[i]+K)%26;
}
}
void MH_Dich_Chuyen::Process_MS_MC(){
unsigned int i=0;
for (i=0;i<strlen(RC);i++){
MC[i]=MS[i]+'a';
}
}
// Cac Ham Chuyen Doi Tu Ma Chu Sang Ro
Chu ///////////////////////
void MH_Dich_Chuyen::Process_MC_MS(){
unsigned int i = 0;
for (i=0;i<strlen(MC);i++){
MS[i] = tolower(MC[i])-'a';
}
GV. Lê Đ c Nh ngắ ườ Trang 62
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
}
void MH_Dich_Chuyen::Process_MS_RS(){
unsigned int i = 0;
for (i=0;i<strlen(MC);i++){
RS[i] = (MS[i]-K)%26;
if (RS[i]<0) RS[i]+26;
}
}
void MH_Dich_Chuyen::Process_RS_RC(){
unsigned int i = 0;
for (i=0;i<strlen(MC);i++){
RC[i]=RS[i]+'a';
}
}
// Ham Ma Hoa Theo Ma Dich
Chuyen ///////////////////////////////////
void MH_Dich_Chuyen::Encryp(){
unsigned int exit=1;
unsigned int option;
do{
clrscr();
cout <<"**** THUC DON LAP MA THEO MA DICH CHUYEN
************\n";
cout <<" 1. Nhap Xau RO_CHU\n";
cout RO_SO\n";
cout MA_SO\n";
cout MA_CHU\n";
cout <<" 0. Ve Thuc Don Chinh\n";
cout
<<"***********************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 1 :
MH_Dich_Chuyen::Input_Key();
MH_Dich_Chuyen::Input_RC();
MH_Dich_Chuyen::Process_RC_RS();
MH_Dich_Chuyen::Process_RS_MS();
MH_Dich_Chuyen::Process_MS_MC();
break;
case 2 :
MH_Dich_Chuyen::Output_RC();
MH_Dich_Chuyen::Output_RS();
cin >>option;
break;
case 3 :
MH_Dich_Chuyen::Output_RS();
MH_Dich_Chuyen::Output_MS();
cin >>option;
break;
case 4 :
MH_Dich_Chuyen::Output_MS();
MH_Dich_Chuyen::Output_MC();
cin >>option;
break;
case 0 :
GV. Lê Đ c Nh ngắ ườ Trang 63
exit=0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De Tiep
Tuc ";
cin >>option;
}
}while (exit==1);
}
// Ham Giai Ma Theo Ma Dich
Chuyen //////////////////////////////////
void MH_Dich_Chuyen::De_Encryp(){
unsigned int exit=1;
unsigned int option;
do{
clrscr();
cout <<"**** THUC DON GIAI MA THEO MA DICH CHUYEN
************\n";
cout <<" 1. Nhap Xau MA_CHU\n";
cout MA_SO\n";
cout RO_SO\n";
cout RO_CHU\n";
cout <<" 0. Ve Thuc Don Chinh\n";
cout
<<"*************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 1 :
MH_Dich_Chuyen::Input_Key();
MH_Dich_Chuyen::Input_MC();
MH_Dich_Chuyen::Process_MC_MS();
MH_Dich_Chuyen::Process_MS_RS();
MH_Dich_Chuyen::Process_RS_RC();
break;
case 2 :
MH_Dich_Chuyen::Output_MC();
MH_Dich_Chuyen::Output_MS();
cin >>option;
break;
case 3 :
MH_Dich_Chuyen::Output_MS();
MH_Dich_Chuyen::Output_RS();
cin >>option;
break;
case 4 :
MH_Dich_Chuyen::Output_RS();
MH_Dich_Chuyen::Output_RC();
cin >>option;
break;
case 0 :
exit=0;
break;
default :
GV. Lê Đ c Nh ngắ ườ Trang 64
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De
Tiep Tuc ";
cin >>option;
}
}while (exit==1);
}
// Chuong Trinh
Chinh /////////////////////////////////////////////
void main(){
char option;
unsigned int exit=1;
do{
clrscr();
MH_Dich_Chuyen *obj;
cout <<"****** MA HOA THEO MA DICH CHUYEN
********************\n";
cout <<" L. Lap Ma\n";
cout <<" G. Giai Ma\n";
cout <<" K. Ket Thuc\n";
cout
<<"**************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 'L':
obj = new MH_Dich_Chuyen;
obj->Encryp();
break;
case 'l':
obj = new MH_Dich_Chuyen;
obj->Encryp();
break;
case 'G':
obj = new MH_Dich_Chuyen;
obj->De_Encryp();
break;
case 'g':
obj = new MH_Dich_Chuyen;
obj->De_Encryp();
break;
case 'K' :
exit = 0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De
Tiep Tuc ";
cin >>option;
}
delete obj;
}while(exit==1);
}
7.2Mã hóa thay thế
#include
GV. Lê Đ c Nh ngắ ườ Trang 65
#include
#include
#include
#include
class MH_Thay_The{
private :
int K[26],KN[26],length; // Khoa K
char RC[255],MC[255]; // Ro Chu, Ma Chu
int RS[255],MS[255]; // Ro So, Ma So
public :
void Encryp(); // Ham Ma Hoa
void De_Encryp(); // Ham Giai Ma
private :
void Input_Key(); // Nhap Khoa K
void Input_RC(); // Nhap Ro Chu
void Input_MC(); // Nhap Ma Chu
void Output_RC(); // Xuat Ro Chu
void Output_MC(); // Xuat Ma Chu
void Output_RS(); // Xuat Ro So
void Output_MS(); // Xuat Ma So
// Cac ham lap ma
void Process_RC_RS(); // Chuyen Ro Chu ==> Ro So
void Process_RS_MS(); // Chuyen Ro So ==> Ma So
void Process_MS_MC(); // Chuyen Ma So ==> Ma Chu
// Cac ham giai ma
void Process_MC_MS(); // Chuyen Ma Chu ==> Ma So
void Process_MS_RS(); // Chuyen Ma So ==> Ro So
void Process_RS_RC(); // Chuyen Ro So ==> Ro Chu
// Cac ham bo xung
int Check_K(char k); // Kiem Tra Su Dung Dan Cua
K
};
// Cac Ham Nhap Du
Lieu /////////////////////////////////////////
void MH_Thay_The::Input_Key(){
char k;
unsigned int i;
cout <<"Nhap Bo Khoa K : \n";
for (i=0;i<26;i++){
do{
cout <<(char)('a'+i)<<" : ";
cin >>k;
}while(!Check_K(k));
K[i] = tolower(k)-'a';
KN[K[i]] = i;
}
}
int MH_Thay_The::Check_K(char k){
unsigned int i;
for (i=0; i < 26; i++){
if ((tolower(k)-'a')==K[i]) return 0;
}
return 1;
}
void MH_Thay_The::Input_RC(){
GV. Lê Đ c Nh ngắ ườ Trang 66
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
cout <<"Nhap Ban Ro Chu : ";
cin >>RC;
length = strlen(RC);
}
void MH_Thay_The::Input_MC(){
cout <<"Nhap Ban Ma Chu : ";
cin >>MC;
length = strlen(MC);
}
// Cac Ham Xuat Du
Lieu //////////////////////////////////////////
void MH_Thay_The::Output_RC(){
unsigned int i = 0;
cout <<"Ban Ro Chu : ";
for (i=0;i<length;i++){
cout <<" "<<RC[i];
}
}
void MH_Thay_The::Output_MC(){
cout <<"Ban Ma Chu : ";
unsigned int i = 0;
cout <<"Ban Ma Chu : ";
for (i=0;i<length;i++){
cout <<" "<<MC[i];
}
}
void MH_Thay_The::Output_RS(){
unsigned int i=0;
cout <<"Ban Ro So : ";
for (i=0;i<length;i++){
cout <<" "<<RS[i];
}
cout <<"\n";
}
void MH_Thay_The::Output_MS(){
unsigned int i=0;
cout <<"Ban Ma So : ";
for (i=0;i<length;i++){
cout <<" "<<MS[i];
}
cout <<"\n";
}
// Cac Ham Chuyen Doi Tu Ro Chu Sang Ma
Chu ///////////////////////
void MH_Thay_The::Process_RC_RS(){
unsigned int i=0;
for (i=0;i<strlen(RC);i++){
RS[i]=tolower(RC[i])-'a';
}
}
void MH_Thay_The::Process_RS_MS(){
unsigned int i=0;
for (i=0;i<strlen(RC);i++){
MS[i] = K[RS[i]];
}
}
GV. Lê Đ c Nh ngắ ườ Trang 67
void MH_Thay_The::Process_MS_MC(){
unsigned int i=0;
for (i=0;i<strlen(RC);i++){
MC[i]=MS[i]+'a';
}
}
// Cac Ham Chuyen Doi Tu Ma Chu Sang Ro
Chu ///////////////////////
void MH_Thay_The::Process_MC_MS(){
unsigned int i = 0;
for (i=0;i<strlen(MC);i++){
MS[i] = tolower(MC[i])-'a';
}
}
void MH_Thay_The::Process_MS_RS(){
unsigned int i = 0;
for (i=0;i<strlen(MC);i++){
RS[i] = KN[MS[i]];
}
}
void MH_Thay_The::Process_RS_RC(){
unsigned int i = 0;
for (i=0;i<strlen(MC);i++){
RC[i]=RS[i]+'a';
}
}
// Ham Ma Hoa Theo Ma Dich
Chuyen ///////////////////////////////////
void MH_Thay_The::Encryp(){
unsigned int exit=1;
unsigned int option;
do{
clrscr();
cout <<"****** THUC DON LAP MA THEO MA THAY THE
**************\n";
cout <<" 1. Nhap Xau RO_CHU\n";
cout RO_SO\n";
cout MA_SO\n";
cout MA_CHU\n";
cout <<" 0. Ve Thuc Don Chinh\n";
cout
<<"*************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 1 :
MH_Thay_The::Input_Key();
MH_Thay_The::Input_RC();
MH_Thay_The::Process_RC_RS();
MH_Thay_The::Process_RS_MS();
MH_Thay_The::Process_MS_MC();
break;
case 2 :
MH_Thay_The::Output_RC();
MH_Thay_The::Output_RS();
GV. Lê Đ c Nh ngắ ườ Trang 68
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
cin >>option;
break;
case 3 :
MH_Thay_The::Output_RS();
MH_Thay_The::Output_MS();
cin >>option;
break;
case 4 :
MH_Thay_The::Output_MS();
MH_Thay_The::Output_MC();
cin >>option;
break;
case 0 :
exit=0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De Tiep
Tuc ";
cin >>option;
}
}while (exit==1);
}
// Ham Giai Ma Theo Ma Dich
Chuyen //////////////////////////////////
void MH_Thay_The::De_Encryp(){
unsigned int exit=1;
unsigned int option;
do{
clrscr();
cout <<"*** THUC DON GIAI MA THEO MA THAY THE
**************\n";
cout <<" 1. Nhap Xau MA_CHU\n";
cout MA_SO\n";
cout RO_SO\n";
cout RO_CHU\n";
cout <<" 0. Ve Thuc Don Chinh\n";
cout
<<"*************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 1 :
MH_Thay_The::Input_Key();
MH_Thay_The::Input_MC();
MH_Thay_The::Process_MC_MS();
MH_Thay_The::Process_MS_RS();
MH_Thay_The::Process_RS_RC();
break;
case 2 :
MH_Thay_The::Output_MC();
MH_Thay_The::Output_MS();
cin >>option;
break;
case 3 :
MH_Thay_The::Output_MS();
MH_Thay_The::Output_RS();
GV. Lê Đ c Nh ngắ ườ Trang 69
cin >>option;
break;
case 4 :
MH_Thay_The::Output_RS();
MH_Thay_The::Output_RC();
cin >>option;
break;
case 0 :
exit=0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De Tiep
Tuc ";
cin >>option;
}
}while (exit==1);
}
// Chuong Trinh
Chinh /////////////////////////////////////////////
void main(){
char option;
unsigned int exit=1;
do{
clrscr();
MH_Thay_The *obj;
cout <<"***** MA HOA THEO MA THAY THE
************************\n";
cout <<" L. Lap Ma\n";
cout <<" G. Giai Ma\n";
cout <<" K. Ket Thuc\n";
cout
<<"***************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 'L':
obj = new MH_Thay_The;
obj->Encryp();
break;
case 'l':
obj = new MH_Thay_The;
obj->Encryp();
break;
case 'G':
obj = new MH_Thay_The;
obj->De_Encryp();
break;
case 'g':
obj = new MH_Thay_The;
obj->De_Encryp();
break;
case 'K' :
exit = 0;
break;
default :
GV. Lê Đ c Nh ngắ ườ Trang 70
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De
Tiep Tuc ";
cin >>option;
}
delete obj;
}while(exit==1);
}
7.3Mã hóa RSA
#include
#include
#include
#include
#include
#include
class MH_RSA{
private :
unsigned long fi,n; // Khoa K
unsigned int p,q,a,b;
int length;
char RC[255],MC[255]; // Ro Chu, Ma Chu
int RS[255],MS[255]; // Ro So, Ma So
unsigned long RST[255]; // Ro So Ghep Theo Bo
unsigned long MST[255]; // Ma So Ghep Theo Bo
public :
void Encryp(); // Ham Ma Hoa
void De_Encryp(); // Ham Giai Ma
private :
void Input_Key(); // Nhap Khoa K
void Input_RC(); // Nhap Ro Chu
void Input_MC(); // Nhap Ma Chu
void Output_RC(); // Xuat Ro Chu
void Output_MC(); // Xuat Ma Chu
void Output_RS(); // Xuat Ro So
void Output_MS(); // Xuat Ma So
// Cac ham lap ma
void Process_RC_RS(); // Chuyen Ro Chu ==> Ro So
void Process_RS_MS(); // Chuyen Ro So ==> Ma So
void Process_MS_MC(); // Chuyen Ma So ==> Ma Chu
// Cac ham giai ma
void Process_MC_MS(); // Chuyen Ma Chu ==> Ma So
void Process_MS_RS(); // Chuyen Ma So ==> Ro So
void Process_RS_RC(); // Chuyen Ro So ==> Ro Chu
// Cac ham khoi tao du lieu
void RSA_Chon_PQ(); // Chon p,q la hai so nguyen to
void RSA_Chon_b(); // Chon b la so nt cung nhau
voi fi
// Cac ham nhap lieu
long ND_a(int a,int n); //Tinh nghich dao a
long Exp_Mod(int x,int b, int n); //Luy thua va Mod
unsigned int Check_USCLN(int a, int b);// USCLN hai so
unsigned int Check_NT(long n); // Kiem tra nguyen to
unsigned int Gets_NT(int i); // Lay nguyen to thu i
};
GV. Lê Đ c Nh ngắ ườ Trang 71
// ///////////////////////////////////////////////////////////
////
// Thu tuc tinh nghich dao a theo module n
// ///////////////////////////////////////////////////////////
////
long MH_RSA::ND_a(int a, int n){
int ND_a;
long n0,a0,t0,t1,t2,q,r;
n0=n;
a0=a;
t0=0;
t1=1;
q=n0/a0;
r=n0-q*a0;
while (r>0){
t2=t0-q*t1;
if (t2>=0)
t2=t2 % n;
else
t2 = n - (-t2 % n);
t0 = t1;
t1=t2;
n0=a0;
a0=r;
q=n0/a0;
r=n0 - q*a0;
}
if (a0==1)
ND_a = t2 % n;
else
ND_a = 0;
return ND_a;
}
// ///////////////////////////////////////////////////////////
////
// Thu tuc luy thua to va mod
// ///////////////////////////////////////////////////////////
////
long MH_RSA::Exp_Mod(int x, int b, int n){
int i;
long t= x % n;
for (i=2;i<= b;i++)
t=(t*(x%n))%n;
return t;
}
// ///////////////////////////////////////////////////////////
////
// Thu thuc sinh so tu dong cho P,Q
// ///////////////////////////////////////////////////////////
////
unsigned int MH_RSA::Gets_NT(int n){
long nt;
long i=0,count=1;
do{
i++;
GV. Lê Đ c Nh ngắ ườ Trang 72
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
if (Check_NT(i)){
nt = i;
count++;
}
}while (count<=n);
return nt;
}
unsigned int MH_RSA::Check_NT(long n){
long i;
for (i=2;i<n/2+1;i++){
if ((n%i)==0) return 0;
}
return 1;
}
// ///////////////////////////////////////////////////////////
////
// Thu thuc sinh so tu dong b nguyen to cung nhau voi fi
// ///////////////////////////////////////////////////////////
////
unsigned int MH_RSA::Check_USCLN(int a, int b){
while (a!=0 && b!=0){
if (a>b) a-=b;
else b-=a;
}
if (a==0)
return b;
else
return a;
}
// Cac Ham Nhap Du
Lieu /////////////////////////////////////////
void MH_RSA::RSA_Chon_PQ(){
int option;
int i,j;
// Lay p,q
cout <<"Ban tu chon P,Q (1-Tu Chon/0-Ngau Nhien)? ";
cin >>option;
if (option==1){
cout <<"Nhap gia tri nguyen to p : ";
cin >>p;
cout <<"Nhap gia tri nguyen to q : ";
cin >>q;
}else{
randomize();
i=random(1000);
j=random(1000);
p=Gets_NT(i);
q=Gets_NT(j);
cout <<"Gia tri p nguyen to chon duoc la : "<<p<<"\n";
cout <<"Gia tri q nguyen to chon duoc la : "<<q<<"\n";
}
n=q*p;
fi = (q-1)*(p-1);
cout <<"Gia tri fi : "<<fi<<"\n";
cout <<"Gia tri n : "<<n<<"\n";
}
GV. Lê Đ c Nh ngắ ườ Trang 73
void MH_RSA::RSA_Chon_b(){
//lay b
int option;
cout <<"Chon b nguyen to cung nhau voi fi (1-Tu chon/0-Ngau
nhien)";
cin >>option;
if (option!=1){
randomize();
b = random(3000);
do{
n++;
}while (Check_USCLN(b,fi)!=1);
cout <<"Gia tri b chon duoc : "<<b<<"\n";
}else{
cout <<"Nhap gia tri b : ";
cin >>b;
}
// Lay a
a= MH_RSA::ND_a(b,fi);
cout <<"Gia tri a la nghich dao cua b : "<<a<<"\n";
}
void MH_RSA::Input_Key(){
MH_RSA::RSA_Chon_PQ();
MH_RSA::RSA_Chon_b();
}
void MH_RSA::Input_RC(){
cout <<"Nhap Ban Ro Chu : ";
cin >>RC;
length = strlen(RC);
}
void MH_RSA::Input_MC(){
cout <<"Nhap Ban Ma Chu : ";
cin >>MC;
length = strlen(MC);
}
// Cac Ham Xuat Du
Lieu //////////////////////////////////////////
void MH_RSA::Output_RC(){
unsigned int i = 0;
cout <<"Ban Ro Chu : ";
for (i=0;i<length;i++){
cout <<" "<<RC[i];
}
cout <<"\n";
}
void MH_RSA::Output_MC(){
unsigned int i = 0;
cout <<"Ban Ma Chu : ";
for (i=0;i<length;i++){
cout <<" "<<MC[i];
}
cout <<"\n";
}
void MH_RSA::Output_RS(){
unsigned int i=0;
GV. Lê Đ c Nh ngắ ườ Trang 74
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
cout <<"Ban Ro So : ";
for (i=0;i<length;i++){
cout <<" "<<RS[i];
}
cout <<"\n";
}
void MH_RSA::Output_MS(){
unsigned int i=0;
cout <<"Ban Ma So : ";
for (i=0;i<length;i++){
cout <<" "<<MS[i];
}
cout <<"\n";
}
// Cac Ham Chuyen Doi Tu Ro Chu Sang Ma
Chu ///////////////////////
void MH_RSA::Process_RC_RS(){
unsigned int i=0;
for (i=0;i<length;i++){
RS[i]=tolower(RC[i])-'a';
}
}
void MH_RSA::Process_RS_MS(){
unsigned int i=0;
for (i=0;i<length;i++){
MS[i] = MH_RSA::Exp_Mod(RS[i],b,n);
}
}
void MH_RSA::Process_MS_MC(){
unsigned int i=0;
for (i=0;i<length;i++){
MC[i]=MS[i]+'a';
}
}
// Cac Ham Chuyen Doi Tu Ma Chu Sang Ro
Chu ///////////////////////
void MH_RSA::Process_MC_MS(){
unsigned int i = 0;
for (i=0;i<length;i++){
MS[i] = tolower(MC[i])-'a';
}
}
void MH_RSA::Process_MS_RS(){
unsigned int i = 0;
for (i=0;i<length;i++){
RS[i] = MH_RSA::Exp_Mod(MS[i],a,n);
}
}
void MH_RSA::Process_RS_RC(){
unsigned int i = 0;
for (i=0;i<length;i++){
RC[i]=RS[i]+'a';
}
}
// Ham Ma Hoa Theo Ma RSA ///////////////////////////////////
void MH_RSA::Encryp(){
GV. Lê Đ c Nh ngắ ườ Trang 75
unsigned int exit=1;
unsigned int option;
do{
clrscr();
cout <<"***** THUC DON LAP MA THEO MA RSA
*******************\n";
cout <<" 1. Nhap Xau RO_CHU\n";
cout RO_SO\n";
cout MA_SO\n";
cout MA_CHU\n";
cout <<" 0. Ve Thuc Don Chinh\n";
cout
<<"*****************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 1 :
MH_RSA::Input_Key();
MH_RSA::Input_RC();
MH_RSA::Process_RC_RS();
MH_RSA::Process_RS_MS();
MH_RSA::Process_MS_MC();
break;
case 2 :
MH_RSA::Output_RC();
MH_RSA::Output_RS();
cin >>option;
break;
case 3 :
MH_RSA::Output_RS();
MH_RSA::Output_MS();
cin >>option;
break;
case 4 :
MH_RSA::Output_MS();
MH_RSA::Output_MC();
cin >>option;
break;
case 0 :
exit=0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De Tiep
Tuc ";
cin >>option;
}
}while (exit==1);
}
// Ham Giai Ma Theo Ma RSA //////////////////////////////////
void MH_RSA::De_Encryp(){
unsigned int exit=1;
unsigned int option;
do{
clrscr();
GV. Lê Đ c Nh ngắ ườ Trang 76
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
cout <<"***** THUC DON GIAI MA THEO MA RSA
*******************\n";
cout <<" 1. Nhap Xau MA_CHU\n";
cout MA_SO\n";
cout RO_SO\n";
cout RO_CHU\n";
cout <<" 0. Ve Thuc Don Chinh\n";
cout
<<"*************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 1 :
MH_RSA::Input_Key();
MH_RSA::Input_MC();
MH_RSA::Process_MC_MS();
MH_RSA::Process_MS_RS();
MH_RSA::Process_RS_RC();
break;
case 2 :
MH_RSA::Output_MC();
MH_RSA::Output_MS();
cin >>option;
break;
case 3 :
MH_RSA::Output_MS();
MH_RSA::Output_RS();
cin >>option;
break;
case 4 :
MH_RSA::Output_RS();
MH_RSA::Output_RC();
cin >>option;
break;
case 0 :
exit=0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De Tiep
Tuc ";
cin >>option;
}
}while (exit==1);
}
// Chuong Trinh
Chinh /////////////////////////////////////////////
void main(){
char option;
unsigned int exit=1;
do{
clrscr();
MH_RSA *obj;
cout <<"***** MA HOA THEO MA RSA
*****************************\n";
cout <<" L. Lap Ma\n";
cout <<" G. Giai Ma\n";
GV. Lê Đ c Nh ngắ ườ Trang 77
cout <<" K. Ket Thuc\n";
cout
<<"***************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 'L':
obj = new MH_RSA;
obj->Encryp();
break;
case 'l':
obj = new MH_RSA;
obj->Encryp();
break;
case 'G':
obj = new MH_RSA;
obj->De_Encryp();
break;
case 'g':
obj = new MH_RSA;
obj->De_Encryp();
break;
case 'K' :
exit = 0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De Tiep
Tuc ";
cin >>option;
}
delete obj;
}while(exit==1);
}
7.4Ch ký s Elgamalữ ố
#include
#include
#include
#include
#include
#include
class CKS_ELGAMAL{
private :
unsigned int p,g,a,r,beta;
int length;
char RC[255]; // Ro Chu
unsigned long RS[255]; // Ro So
signed long KQKi[255][2]; // Ket Qua Ki
int KQKiem[255]; // Ket Qua Kiem Chu Ki
public :
void Sign(); // Ham Ma Hoa
void Verify(); // Ham Giai Ma
private :
void Input_Key(); // Nhap Du Lieu Ki
void Input_RC(); // Nhap Ro Chu
GV. Lê Đ c Nh ngắ ườ Trang 78
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
void Input_KQKi(); // Nhap Bo So Kiem Thu
(gama,delta)
void Output_RC(); // Xuat Ro Chu
void Output_RS(); // Xuat Ro So
void Output_KQKi(); // Xuat Ket Qua Ky
(gama,delta)
void Output_KQKiem(); // Xuat Ket Qua Kiem Chu Ki
// Cac ham ki
void Process_RC_RS(); // Chuyen Ro Chu ==> Ro So
void Process_KiSo() ; // Thuc Hien Ham Ki
void Process_Kiem(); // Thuc Hien Ham Kiem Thu
// Cac ham khoi tao gia tri bien
void ELGAMAL_Chon_P(); // Chon p
void ELGAMAL_Chon_G(); // Chon g phan tu sinh
void ELGAMAL_Chon_A(); // Chon a
void ELGAMAL_Chon_BeTa(); // Chon beta
void ELGAMAL_Chon_R(); // Chon r
// Cac ham tinh toan bo xung
long Exp_Mod(int x,int b, int n); // Luy thua va Mod
long ND_a(int a,int n); // Tinh nghich dao a
unsigned int Check_NT(long n); // Kiem tra
nguyen to
unsigned int Gets_NT(int i); // Lay nguyen to
thu i
unsigned int Check_USCLN(int a, int b); // USCLN hai so
};
// Thu tuc tinh nghich dao a theo module
n///////////////////////////////
long CKS_ELGAMAL::ND_a(int a, int n){
int ND_a;
long n0,a0,t0,t1,t2,q,r;
n0=n;
a0=a;
t0=0;
t1=1;
q=n0/a0;
r=n0-q*a0;
while (r>0){
t2=t0-q*t1;
if (t2>=0)
t2=t2 % n;
else
t2 = n - (-t2 % n);
t0 = t1;
t1=t2;
n0=a0;
a0=r;
q=n0/a0;
r=n0 - q*a0;
}
if (a0==1)
ND_a = t2 % n;
else
ND_a = 0;
return ND_a;
}
GV. Lê Đ c Nh ngắ ườ Trang 79
// Thu tuc luy thua to va
mod//////////////////////////////////////
long CKS_ELGAMAL::Exp_Mod(int x, int b, int n){
int i;
long t= x % n;
for (i=2;i<= b;i++)
t=(t*(x%n))%n;
return t;
}
// Thu Tuc Lay So Nguyen To Thu
I///////////////////////////////////////
unsigned int CKS_ELGAMAL::Gets_NT(int n){
long nt;
long i=0,count=1;
do{
i++;
if (Check_NT(i)){
nt = i;
count++;
}
}while (count<=n);
return nt;
}
unsigned int CKS_ELGAMAL::Check_NT(long n){
long i;
for (i=2;i<n/2+1;i++){
if ((n%i)==0) return 0;
}
return 1;
}
// Thu Tuc Kiem tra
USCLN/////////////////////////////////////////////////
unsigned int CKS_ELGAMAL::Check_USCLN(int a, int b){
while (a!=0 && b!=0){
if (a>b) a-=b;
else b-=a;
}
if (a==0)
return b;
else
return a;
}
// Cac Ham Khoi Tao Du
Lieu /////////////////////////////////////////
void CKS_ELGAMAL::ELGAMAL_Chon_P(){
// p la so nguyen to lon ngau nhien
int option,i;
cout <<"Ban co muon tu chon p khong 1-Co/0-Khong ";
cin >>option;
if (option==1){
cout <<"Nhap gia tri nguyen to p : ";
cin >>p;
}else{
//randomize();
//i = random(1000);
GV. Lê Đ c Nh ngắ ườ Trang 80
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
p=CKS_ELGAMAL::Gets_NT(i);
cout <<"Gia tri p nguyen to ngau nhien la : "<<p<<"\n";
}
}
void CKS_ELGAMAL::ELGAMAL_Chon_G(){
// g la phan tu sinh trong nhoms Zp* -
// tap cac so nguyen to cung nhau voi p va nho hon p
int option;
cout <<"Ban co muon tu chon g khong 1-Co/0-Khong ";
cin >>option;
if (option==1){
cout <<"Nhap phan tu sinh g : ";
cin >>g;
}else{
};
cout <<"\n";
}
void CKS_ELGAMAL::ELGAMAL_Chon_A(){
// a ngau nhien thuoc Zp* la chia khoa mat thu nhat
// a so so thoa man uoc chung lon nhat voi p = 1
int option;
cout <<"Ban co muon tu chon a khong 1-Co/0-Khong ";
cin >>option;
if (option==1){
cout <<"Nhap gia tri khoa a : ";
cin >>a;
}else{
do{
//a = random(p);
}while (CKS_ELGAMAL::Check_USCLN(a,p)!=1);
cout <<"Gia tri a ngau nhien la : "<<a<<"\n";
}
}
void CKS_ELGAMAL::ELGAMAL_Chon_R(){
// r la phan tu ngau nhien thuoc Zp-1
int option ;
cout <<"Ban co muon tu chon r khong 1-Co/0-Khong ";
cin >>option;
if (option==1){
cout <<"Nhap gia tri khoa r : ";
cin >>r;
}else{
do{
//r= random(p);
}while (CKS_ELGAMAL::Check_USCLN(r,p-1)!=1);
cout <<"Gia tri r ngau nhien la : "<<r<<"\n";
}
}
void CKS_ELGAMAL::ELGAMAL_Chon_BeTa(){
// beta thoa man dong du voi exp(g,a) mod p
// beta chinh la phan du cua g mu a mod p
beta = CKS_ELGAMAL::Exp_Mod(g,a,p);
cout <<"Gia tri beta tinh duoc la : "<<beta;
cout <<"\n";
}
GV. Lê Đ c Nh ngắ ườ Trang 81
void CKS_ELGAMAL::Input_Key(){
CKS_ELGAMAL::ELGAMAL_Chon_P(); // Cong khai
CKS_ELGAMAL::ELGAMAL_Chon_G();
CKS_ELGAMAL::ELGAMAL_Chon_A(); // Bi mat
CKS_ELGAMAL::ELGAMAL_Chon_BeTa(); // Cong khai
CKS_ELGAMAL::ELGAMAL_Chon_R(); // Bi mat
}
// Cac ham nhap du
lieu ///////////////////////////////////////////
void CKS_ELGAMAL::Input_RC(){
//cout <<"Nhap Ban Ro Chu : ";
//cin >>RC;
//length = strlen(RC);
int i;
cout <<"Bo so dai bao nhieu : ";
cin >>length;
for (i=0;i<length;i++){
cout <<"Nhap gia tri ro so : ";
cin >>RS[i];
}
}
void CKS_ELGAMAL::Input_KQKi(){
int i;
cout <<"\nNhap cap so (gamma,delta) tuong ung voi tung ki
tu\n";
for (i=0;i<length; i++){
cout <<"Voi ki tu "<<RC[i]<<" : \n";
cout <<"\tNhap gamma : ";
cin >>KQKi[i][0];
cout <<"\tNhap delta : ";
cin >>KQKi[i][1];
}
}
// Cac Ham Xuat Du
Lieu //////////////////////////////////////////
void CKS_ELGAMAL::Output_RC(){
unsigned int i = 0;
cout <<"Ban Ro Chu : ";
for (i=0;i<length;i++){
cout <<" "<<RC[i];
}
cout <<"\n";
}
void CKS_ELGAMAL::Output_RS(){
unsigned int i=0;
cout <<"Ban Ro So : ";
for (i=0;i<length;i++)
cout <<" "<<RS[i];
cout <<"\n";
}
void CKS_ELGAMAL::Output_KQKi(){
unsigned int i=0;
cout <<"Ket qua ki tren tung ki tu ban ro\n";
cout <<"Gamma : ";
for (i=0; i <length;i++)
GV. Lê Đ c Nh ngắ ườ Trang 82
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
cout <<" "<<KQKi[i][0];
cout <<"\nDelta : ";
for (i=0;i<length;i++)
cout <<" " <<KQKi[i][1];
cout <<"\n";
}
void CKS_ELGAMAL::Output_KQKiem(){
unsigned int i=0;
cout <<"Kiem thu chu ki tren tung ki tu ban ro\n";
cout <<"Ket Qua : ";
for (i=0;i<length;i++){
if (KQKiem[i]==0)
cout<<" F";
else
cout<<" T";
}
cout <<"\n";
}
// Cac Ham Chuyen Doi Tu Ro Chu Sang Ma
Chu ///////////////////////
void CKS_ELGAMAL::Process_RC_RS(){
unsigned int i=0;
for (i=0;i<length;i++){
RS[i]=tolower(RC[i])-'a';
}
}
void CKS_ELGAMAL::Process_KiSo(){
unsigned int i=0,NDR;
long tmp;
NDR = CKS_ELGAMAL::ND_a(r,p-1);
cout <<"Nghich dao cu r la : "<<NDR;
NDR = NDR%(p-1);
cout <<"Sau khi chi lay du co : "<<NDR;
for (i=0;i<length;i++){
KQKi[i][0] = CKS_ELGAMAL::Exp_Mod(g,r,p);
tmp = (RS[i]-a*KQKi[i][0])*NDR;
do
tmp+=(p-1);
while (tmp<0);
KQKi[i][1] = tmp;
}
}
void CKS_ELGAMAL::Process_Kiem(){
unsigned int i=0;
unsigned long result1;
unsigned long result2;
for (i=0;i<length;i++){
result1=CKS_ELGAMAL::Exp_Mod(beta,KQKi[i][0],p);
result1=result1*CKS_ELGAMAL::Exp_Mod(KQKi[i][0],KQKi[i]
[1],p);
result1=result1%p;
result2=CKS_ELGAMAL::Exp_Mod(g,RS[i],p);
if (result1==result2)
KQKiem[i] = 1;
else
KQKiem[i]=0;
GV. Lê Đ c Nh ngắ ườ Trang 83
}}
// Ham Ki
So /////////////////////////////////////////////////////
void CKS_ELGAMAL::Sign(){
int stop;
CKS_ELGAMAL::Input_Key();
CKS_ELGAMAL::Input_RC();
//CKS_ELGAMAL::Process_RC_RS();
CKS_ELGAMAL::Process_KiSo();
CKS_ELGAMAL::Output_RC();
CKS_ELGAMAL::Output_RS();
CKS_ELGAMAL::Output_KQKi();
cout <<"Nhap phim bat ki de ket thuc ";
cin >>stop;
}
// Ham Kiem Ki
So //////////////////////////////////////////////////
void CKS_ELGAMAL::Verify(){
int stop;
CKS_ELGAMAL::Input_Key();
CKS_ELGAMAL::Input_RC();
CKS_ELGAMAL::Input_KQKi();
//CKS_ELGAMAL::Process_RC_RS();
CKS_ELGAMAL::Process_Kiem();
CKS_ELGAMAL::Output_RC();
CKS_ELGAMAL::Output_RS();
CKS_ELGAMAL::Output_KQKiem();
cout <<"Nhap phim bat ki de ket thuc ";
cin >>stop;
}
// Chuong Trinh
Chinh /////////////////////////////////////////////
void main(){
char option;
unsigned int exit=1;
do{ //clrscr();
CKS_ELGAMAL *obj;
cout <<"* Chu Ki Dien Tu Theo Chuan ELGAMAL
******************\n";
cout <<" S. Ky So\n";
cout <<" V. Kiem Thu Ky So\n";
cout <<" K. Ket Thuc\n";
cout
<<"************************************************\n";
cout <<" Xin Moi Ban Lua Chon : ";
cin >>option;
switch(option){
case 'S':
obj = new CKS_ELGAMAL;
obj->Sign();
break;
case 's':
obj = new CKS_ELGAMAL;
obj->Sign();
break;
GV. Lê Đ c Nh ngắ ườ Trang 84
Tr ng Đ i h c H i Phòngườ ạ ọ ả Bài gi ng: An toàn thông tin ả
case 'V':
obj = new CKS_ELGAMAL;
obj->Verify();
break;
case 'v':
obj = new CKS_ELGAMAL;
obj->Verify();
break;
case 'K' :
exit = 0;
break;
default :
cout <<" Ban Nhap Sai Du Lieu. Bam Enter De Tiep
Tuc ";
cin >>option;
}
delete obj;
}while(exit==1);
}
GV. Lê Đ c Nh ngắ ườ Trang 85
Các file đính kèm theo tài liệu này:
- An toàn dữ liệu trên mạng máy tính.pdf