Đề tài An toàn dữ liệu trên mạng máy tính

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.

pdf85 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2077 | Lượt tải: 0download
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:

  • pdfAn toàn dữ liệu trên mạng máy tính.pdf
Tài liệu liên quan