Tài liệu tham khảo...14 Trang 3 B,NỘI DUNGI.tổng quan về C 1 Lịch sử ngôn ngữ CNgôn ngữ C do Dennis Ritchie sáng tác 1972 tại phòng thí nghiệm Bell Telephone vớimục đích tương đối hạ
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
KHOA PFIEV
Đề tài:viết chương trình mã hóa và giải mã xâu kí tự theo sơ đồ Caesar với khóa k=3?
Giáo viên h ướng dẫn: ng d n: ẫn: H Quang Hi u ồ Quang Hiếu ếu
Sinh viên th c hi n: ực hiện: ện: Dương Đăng Thức
và Nguyễn Ngọc Tín
L p ớng dẫn: : 10clc
20., tháng01 năm 2011
Trang 2A,MỤC LỤC
I tổng quan về C 4
1) Lịch sử ngôn ngữ C 4
2) Tại sao dùng C 4
3) Những khuyết điểm của C 5
II Giới thiệu về mật mã 5
1) Giới thiệu 5
Thông báo 5
Khoá (key) 5
,Hệ thống mật mã (cryptosystem)Hệ thống mật mã (cryptosystem) 5
Bẻ gãy (breaking) một hệ thống mật mã 5
2) Phương pháp mã hóa của Caesar 6
III sơ đồ khối và chương trình 7
1) sơ đồ thuật toán 7
2) chương trình 9
IV Kết quả thử nghiệm chương trình,Hệ thống mật mã (cryptosystem)nhận xét,Hệ thống mật mã (cryptosystem)đánh giá và hướng phát triển 11
1) Kết quả thử nghiệm 11
2) Nhận xét,Hệ thống mật mã (cryptosystem)hướng giải quyết 12
XI Tài liệu tham khảo 14
Trang 3
B,NỘI DUNG
I tổng quan về C
1) Lịch sử ngôn ngữ C
Ngôn ngữ C do Dennis Ritchie sáng tác 1972 tại phòng thí nghiệm Bell Telephone với mục đích tương đối hạn chế: tạo ngôn ngữ để viết hệ điều hành UNIX.song nhờ tính
ưu việt và tính mềm dẻo nên đã được giới tin học nhanh chóng chấp nhận như là ngôn ngữ chính thống nhà nghề
Đến 1978,Hệ thống mật mã (cryptosystem) bản in đầu tiên về ngôn ngữ C đã đươc in thành sách “the C programming language” do Kernighan viết.C cũng mau chóng được Viện tiêu chuẩn hóa của Mĩ làm thành tiêu chuẩn có tên gọi “ÁNI C” vào 1983.Tổ chức tiêu chuẩn hóa quốc tế ISO cũng xây dựng chuẩn cho C.May mắn thay cho các người dùng các chuẩn này giống nhau và được biết đến với tên chung như là ANSIC
2) Tại sao dùng C
Hiện nay có rất nhiều ngôn ngữ lập trình bậc cao như PẤCL< JAVA….Các ngôn ngữ này đều mạnh cả,Hệ thống mật mã (cryptosystem)nhưng vì sao dùng C:
-C là ngôn ngữ mạnh và mềm dẻo Điều hạn chế đối với C chính là óc tưởng tượng của bạn.Bản thân C không đặt nhiều điều kiện cho bạn.C được sử dụng để viết hệ điều hành,Hệ thống mật mã (cryptosystem) các chương trình điều khiển ,Hệ thống mật mã (cryptosystem)soạn thảo văn bản,Hệ thống mật mã (cryptosystem)đồ họa bẩn tính…và thậm chí là các chương trình dịch cho các ngôn ngữ khác
-C là ngôn ngữ được các nhà tin học chuyên nghiệp dùng phổ biến ,Hệ thống mật mã (cryptosystem)nhất là trong việc viêt phần mềm hệ thống.Một trong các lí do này là tính hiệu quả của chương trình dịch ra.Một chương trình khi dịch ra có thể đạt 80% tính năng của chương trình đó viết bằng mã máy Có khá nhiều chương trình dịch và các thư viện tiện ích khác cho C có thể khai thác được
-C là ngôn ngữ có thể chuyển dịch hay còn gọi là dễ thích nghi.Tính dễ thích nghi hay tính di chuyển được hiểu là một chương trình C viết cho máy tính IBM có thể đêm sang cho hệ thống máy khác cho dịch lại vẫn chạy ngay hoặc sau một vài chỉnh sửa nhỏ
-C là ngôn ngữ ít từ khóa,Hệ thống mật mã (cryptosystem) là các từ dùng riêng cho ngôn ngữ khi viết chương trình -C là ngôn ngữ có cấu trúc modun.Đó là việc sử dụng các chương trình con loại
hàm.Các hàm này có thể sử dụng nhiều lần trong chương trình hoặc các chương trình khác.Tuy nhiên nên nhớ rằng C không cho phép khai báo hàm trong hàm
3) Những khuyết điểm của C
Sau hơn 20 năm ra đời và được giới điện tử-tin học hài lòng sử dụng song không vì thế
mà người ta nói C là tuyệt vời vì sự hoàn hảo.C có một vài khuyết điểm của nó
Một số người thấy rằng cú pháp thuộc loại là lạ và khó học.Khó khăn này dễ vượt qua khi những người học C đã học qua một ngôn ngữ khác nên đã hiểu rõ hơn bản chất vấn đề
Một số kí hiệu của C có nhiều nghĩa khác nhau.Việc sử dụng đúng nghĩa của các toán
tử này phụ thuộc vào ngữ cảnh sử dụng
Việc C quá mềm dẻo nếu như không muốn nói hơi có phần tự do chủ nghĩa song cũng
là sức mạnh của C,Hệ thống mật mã (cryptosystem)đó là việc truy nhập tự do vào dữ liệu,Hệ thống mật mã (cryptosystem)việc trộn lẫn các dữ liệu… có thể dẫn đến sự lạm dụng và làm cho chương trình bất ổn
II Giới thiệu về mật mã.
1) Giới thiệu
Trang 4Mã hoá bảo mật đã có một lịch sử lâu đời,Hệ thống mật mã (cryptosystem) ở đây chúng ta không trình bày về lịch sử của nó mà chỉ trình bày các vấn đề cơ bản của nó Trước hết chúng ta trình bày ý tưởng cơ bản của mật mã hoá
Mật mã hoá là việc biến đổi một thông báo sao cho nó không thể hiểu nổi đối với bất kỳ ai ngoại trừ người nhận được mong muốn
Để thuận tiện trình bày,Hệ thống mật mã (cryptosystem) chúng ta sẽ định nghĩa và kí hiệu cho các khái niệm cơ bản
Thông báo.
là một chuỗi hữu hạn kí hiệu lấy từ một bảng chữ cái Σ và thường
được kí hiệu là m.Ở đây Σ thường là bảng chữ cái tiếng Anh gồm 26 kí tự,Hệ thống mật mã (cryptosystem) thỉnh thoảng có thêm cả kí tự khoảng trắng
Phép mật mã hoá e(m) :e(m) là kí hiệu biểu diễn việc mật mã hoá m
Trong thực tế,Hệ thống mật mã (cryptosystem) mật mã hoá được xem như là một hàm,Hệ thống mật mã (cryptosystem) ánh xạ hay một giải thuật với một tậpcác thông số (ngoài thông số cần có là thông báo cần mã hoá) Từ đây chúng ta
có khái niệmkhoá
Khoá (key)
Khoá là một thông số đầu vào của phép mã hoá mà không phải là thông báo và
thường được kí hiệu là k.Một phép mật mã hoá có thể có nhiều khoá
Chuỗi mật mã (cipher,Hệ thống mật mã (cryptosystem) ciphertext,Hệ thống mật mã (cryptosystem) cryptogram) c = e(m,Hệ thống mật mã (cryptosystem) k) được gọi là chuỗi mật mã Phép giải mật mã d(c,Hệ thống mật mã (cryptosystem) k):d(c,Hệ thống mật mã (cryptosystem) k) là kí hiệu biểu diễn việc giải mật mã hoá.Dĩ nhiên d(c,Hệ thống mật mã (cryptosystem) k) = m
,Hệ thống mật mã (cryptosystem)
Một cách hình thức,Hệ thống mật mã (cryptosystem) một hệ thống mật mã được định nghĩa là một bộ ba (M,Hệ thống mật mã (cryptosystem) K,Hệ thống mật mã (cryptosystem)
C) Trong đó M là tập các thông báo m trên các bảng chữ cái Σ1,Hệ thống mật mã (cryptosystem) K là tập hữu hạn các khoá k,Hệ thống mật mã (cryptosystem) C là tập các chuỗi mật mã c,Hệ thống mật mã (cryptosystem) ngoài ra còn có thêm giả thiết rằng tồn tại các hàm hay giải thuật e và d sao cho e: M × K → C d: C × K → M và đối với mỗi cặp (m,Hệ thống mật mã (cryptosystem) k) ∈ M × K,Hệ thống mật mã (cryptosystem) d(e(m,Hệ thống mật mã (cryptosystem) k) ,Hệ thống mật mã (cryptosystem) k) = m
Bẻ gãy (breaking) một hệ thống mật mã
Bẻ gãy một hệ thống mật mã có nghĩa là gì? Những chuyên gia mật mã hay những kẻ tấn công thường được giả thiết biết đầy đủ thông tin về hàm mã hoá e và hàm giải mã
d Thêm vào đó,Hệ thống mật mã (cryptosystem) họ cũng có thể nhiều thông tin hỗ trợ như các thống kê về ngôn ngữ,Hệ thống mật mã (cryptosystem) kiến thức về ngữ cảnh,Hệ thống mật mã (cryptosystem) vân vân.Họ sẽ chắn chắn có một chuỗi mật mã nào đó,Hệ thống mật mã (cryptosystem) và tất cả những gì mà họ thiếu là khoá ktừ đó học có thể sử dụng d để giải mã c một cách chính xác
Có ba khả năng tấn công cái mà chúng ta dự đoán đối phương tấn công trên hệ thống chúng ta:(1) Tấn công chỉ dựa trên chuỗi mật mã (crytogram-only attack): Đây là trường hợp đãđược mô tả ở trên trong đó đối phương chỉ biết một vài mẫu chuỗi mật
mã c 2) Tấn công dựa trên văn bản đã biết (known-plaintext attack): Trường hợp này thực tế hơn trường hợp (1) Trong trường hợp này những người tấn công được giả thiết
là đã biết một độ dài đáng kể của văn bản thông báo và chuỗi mật mã tương ứng,Hệ thống mật mã (cryptosystem) và từ
đó cố gắng tìm ra khoá
Đây là một sự tấn công dữ dội khó chống đỡ hơn nhiều nhưng ngày nay được xem như
là một chuẩn an toàn tối thiểu phải đạt được Thật vậy vào thời điểm hiện tại,Hệ thống mật mã (cryptosystem) tiêu chuẩn thích hợp nhất để đánh giá một hệ thống bảo mật là rằng khả năng của nó để chống đỡ sự tấn công thậm chí còn mạnh hơn như sau (3) Tấn công dựa trên văn bản được chọn (chosen-plaintext attack): Trong trường hợp này,Hệ thống mật mã (cryptosystem) những người tấn công có thể đã có được một số lượng tuỳ ý của các cặp thông báo và chuỗi mật mã tương ứng
Trang 5(m,Hệ thống mật mã (cryptosystem) c).Không khó để thấy rằng không có hệ thống (hay phương pháp) mật mã nào đã
mô tả ở trên có thể chống đỡ một cuộc tấn công dựa trên văn bản được chọn
Bộ phát sinh khoá k,Hệ thống mật mã (cryptosystem)Bộ mã hoá e ,Hệ thống mật mã (cryptosystem)Bộ giải mã d
Những kẻ tấn công m k k ,Hệ thống mật mã (cryptosystem)c = e(m,Hệ thống mật mã (cryptosystem) k) m
Trường hợp liên quan đến khả năng bị tấn công của nó đối với sự tấn công dựa trên văn bản đã biết là phức tạp hơn Chẳng hạn,Hệ thống mật mã (cryptosystem) xét hệ thống đơn giản nhất – hệ thống dùng phương pháp thay thế đơn giản – sao cho khoá k là một hoán vị của 26 chữ cái trong đó A→ P,Hệ thống mật mã (cryptosystem) B → F,Hệ thống mật mã (cryptosystem) vân vân Bây giờ nếu thông báo m được gởi là “silly message” bao gồm chữ A được lặp lại n lần,Hệ thống mật mã (cryptosystem) thì trong chuỗi mật mã c tương ứng,Hệ thống mật mã (cryptosystem) chữ P sẽ được lặp lại n lần Không thành vấn đề n lớn bao nhiêu,Hệ thống mật mã (cryptosystem) cặp thông báo - chuỗi mật mã cụ thể này sẽ không sinh ra khoá k Tuy nhiên nó không khó để tin rằng,Hệ thống mật mã (cryptosystem) trung bình,Hệ thống mật mã (cryptosystem) nếu đã cho một chiều dài vừa đủ của thông báo và chuỗi mật mã,Hệ thống mật mã (cryptosystem) bất kỳ hệ thống hay phương pháp mật mã ở trên đều có thể bị bẻ gãy (crack) Ở đây chúng ta xem một ví dụ đơn giản về cách bẻ gãy
2) Phương pháp mã hóa của Caesar.
Quá trình mã hóa của Caesar được thực hiện theo các bước sau :
· Bước 1 Ông cho tương ứng mỗi chữ cái trong bảng mẫu tự tiếng Anh (gồm 26 chữ cái) với một số nguyên từ 0 đến 25,Hệ thống mật mã (cryptosystem) thứ tự của chữ cái trong bảng mẫu tự sẽ là số tự nhiên tương ứng
· Bước 2 Tiếp theo,Hệ thống mật mã (cryptosystem) ông sử dụng hàm f để biểu diễn mỗi số nguyên x thuộc tập hợp {0
; 1 ; 2 ; ; 25} tương ứng với giá trị f(x) cũng thuộc tập hợp này,Hệ thống mật mã (cryptosystem) thỏa mãn : f(x) º (x + 3) (mod 26)
· Bước 3 Ông chuyển tương ứng số f(x) thành kí tự như bước 1
Với cách làm này,Hệ thống mật mã (cryptosystem) Caesar hoàn toàn có thể mã hóa tất cả các bức thư của mình,Hệ thống mật mã (cryptosystem) đồng thời cũng giải mã được các bức thư Và theo nguyên tắc thì bức thư mã hóa sẽ không
có dấu cách ( ),Hệ thống mật mã (cryptosystem)nhằm đảm bảo tính bảo mật cho bức thư Song nếu vậy,Hệ thống mật mã (cryptosystem) thì người giải
mã dễ bị nhầm,Hệ thống mật mã (cryptosystem) do đó thì ta có thể quy ước ở mật thư dấu cách ( ) thì ở bức thư giải
mã là dấu cách hoặc là một kí tự dặc biệt như : #,Hệ thống mật mã (cryptosystem) $,Hệ thống mật mã (cryptosystem) &,Hệ thống mật mã (cryptosystem) *…
Sau đây là một số ví dụ
Ví dụ 1 Dùng mật mã của Xê da,Hệ thống mật mã (cryptosystem) hãy chuyển bức thư : “MEET YOU IN THE PARK” (gặp bạn ở công viên) thành một bức thư bí mật
Lời giải Xét hai tập hợp :
C = {A ; B ; C ; D ; E ; F ; G ; H ; I ; J ; K ; L ; M ; N ; O ; P ; Q ; R ; S ; T ; U ; V ;
W ; X ; Y ; Z} và
U = {0 ; 1 ; 2 ; ; 24 ; 25}
Theo cách mã hóa của Saesar,Hệ thống mật mã (cryptosystem) sẽ có tương ứng 1 - 1 mỗi chữ cái của tập hợp C với một số của tập hợp U Thực hiện theo bước 1,Hệ thống mật mã (cryptosystem) ta chuyển bức thư gốc thành dãy số :
Trang 612 4 4 19 - 24 14 20 - 8 13 - 19 7 4
- 15 0 17 10
Bây giờ,Hệ thống mật mã (cryptosystem) ta thay dãy số trên bằng dãy số tương ứng theo bước 2 :
15 7 7 22 - 1 17 23 - 11 16 - 22 10 7
- 18 3 20 13
Tiếp tục thực hiện theo bước 3,Hệ thống mật mã (cryptosystem) ta được bức thư đã mã hóa là : PHHW BRX LQ WKH SDUN
Để phục hồi bức thư gốc đã được mã hóa theo mật mã của Xê da,Hệ thống mật mã (cryptosystem) ta cần dùng hàm ngược f-1 của f Nói cách khác,Hệ thống mật mã (cryptosystem) để tìm lại các bức thư gốc từ bức thư được mã hóa,Hệ thống mật mã (cryptosystem) mỗi chữ cái được tương ứng với chữ cái cách nó 2 vị trí về phía đầu bảng mẫu tự,Hệ thống mật mã (cryptosystem) riêng ba chữ cái đầu bảng A,Hệ thống mật mã (cryptosystem) B,Hệ thống mật mã (cryptosystem) C thì tương ứng thứ tự với X,Hệ thống mật mã (cryptosystem) Y,Hệ thống mật mã (cryptosystem) Z
III sơ đồ khối và chương trình
1) sơ đồ khối của thuật toán
Begin
i=0
s[i]==’ ’
i<
strlen(
s)
end
s[i]=(s[i]-‘a’+3)%26 +
‘a’
s[i]=’ ’
i=i +1
In ra s[i]
Đ
Đ
S
S
Hàm mã hóa
Nhập xâu s
Trang 7
begin
i<strlen(s )
s[i]==’a’
s[i]==’b’
s[i]==’c’
end
s[i]=(s[i]-‘a’+3)%26+’a’
s[i]=’z’
s[i]=’y’
s[i]=’x’
In ra
s[i]
i=i+1
S Đ
Đ
S
S
S
Đ
Đ
Nhập xâu s i=0
Hàm giải mã
Trang 82) chương trình.
#include<string.h>
#include<conio.h>
#include<stdio.h>
//********HAM MA HOA************
void ma_hoa(char s[100])
{
int i;
for (i=0;i<strlen(s);i++)
{
if(s[i]==' ') s[i]=' '; else
s[i]=((s[i]-'a'+3)%26)+'a';
}
printf ("xau ma hoa la:%s\n",Hệ thống mật mã (cryptosystem)s);
}
//*********HAM GIAI MA*************
void giai_ma(char s[100])
{
int i=0;
for (i=0;i<strlen(s);i++)
{
if(s[i]==' ') s[i]=' '; else
{ if (s[i]=='a') s[i]='x'; else
{ if(s[i]=='b') s[i]='y'; else
{ if(s[i]=='c') s[i]='z'; else
s[i]=((s[i]-'a'-3)%26)+'a';
}
}
}
}
printf ("Xau giai ma la:%s\n",Hệ thống mật mã (cryptosystem)s);
}
main()
{
char s[100];
int n;
printf ("nhap xau vao:\n");
gets(s);
printf("nhap khoa:");//*****nhap 1 de ma hoa,Hệ thống mật mã (cryptosystem)2 de giai ma****
scanf("%d",Hệ thống mật mã (cryptosystem)&n);
switch(n) {
case 1: ma_hoa(s); break;
case 2: giai_ma(s); break;
}
getch();
}
Trang 9IV Kết quả thử nghiệm chương trình,nhận xét,đánh giá và hướng phát triển.
1) Kết quả thử nghiệm
hinh 1 Chương trình được viết trên DVC-C++
hinh 2 Kết quả chương trình mã hóa xâu ‘duong dang thuc’
Trang 10hinh 3.
hinh 4 Kết quả giải mã xâu kí tự ‘gxrqj gdqj wkxf’
2) Nhận xét,hướng giải quyết
-Chương trình này chỉ mói giải mã được các kí tự là các chữ cái trong bảng chữ cái tiêng anh mà vẫn chưa giải mã được các số,Hệ thống mật mã (cryptosystem) các kí tự đặc biệt… Mà các yếu tố đó rất quan trọng trong mật thư nên cần phải lập trình một chương trình khác đáp ứng nhu cầu của người dùng Mặt khác,Hệ thống mật mã (cryptosystem) mật thư dễ bị giải mã bằng cách thử một cách truyền thống khóa k từ 1 đến 25 thì sẽ tim ra bí mật Do đó ta nên dùng một số phương pháp
mã hóa khác Ngoài ra cũng có một cách dôn giản khác,Hệ thống mật mã (cryptosystem) tốt hơn nhiều là dùng một bảng tổng quát để định nghĩa sự thay thế sẽ đựơc tạo ra: đối với mỗi chữ cái trong văn bản thận,Hệ thống mật mã (cryptosystem) bẳng sẽ cho biết chữ cái nào sẽ được đặt vào trong văn bản mã Ví dụ,Hệ thống mật mã (cryptosystem) nếu bảng cho sự tương ứng
ABC DEF GHI JKLMN OPQRSTUVWXYZ
THE QUI CKB ROWNF XJMPDVRLAZYG
thì thông điệp sẽ được mã hoá như sau:
Văn bản thật: ATTACK AT DAWN
Văn bản mã: HVVH OTHVTQHAF
Cách này mạnh hơn nhiều so với mật mã Caesar đơn giản,Hệ thống mật mã (cryptosystem) vì người giải mã sẽ phải thử nhiều bảng hơn ( khoảng 27!>10^28) để đảm bảo đọc đựơc các thông điệp Tuy nhiên,Hệ thống mật mã (cryptosystem) các bộ mã " thay thế đơn giản" giống như bộ mã này thì dễ dàng bị mở do các tần số chữ cái vốn có trong ngôn ngữ Ví dụ,Hệ thống mật mã (cryptosystem) vì E là ký tự thông thường nhất trong văn bản tiếng Anh,Hệ thống mật mã (cryptosystem) người giải mã có thể nhận đựơc một điểm khởi đầu tốt khi đọc thông điệp bằng cách tìm chữ cái thường xuất hiện nhất trong văn bản mã và thay nó bằng E Trong khi điều này có thể không hẳn là một lựa chọn đúng,Hệ thống mật mã (cryptosystem) nhưng nó lại đặc biệt tốt hơn việc thử tất cả 26 chữ cái một cách mò mẫm Trường hợp tốt hơn nữa ( cho người giải mã ) là khi bắt gặp các tổ hợp hai chữ cái ( digram): các digram cụ thể ( như QJ) không bao giờ xảy ra trong văn bản tiếng Anh trong khi những chữ cái khác ( như ER) lại rất phổ biến Bằng cách xét các tần số của các chữ cái và các tổ hợp ký tự,Hệ thống mật mã (cryptosystem) một nhà giải mã học có thể mở khoá một bộ mã thay thế đơn giản một cách dễ dàng Và có nhiều cách khác nữa