PDA

View Full Version : [TUTOR] Giới thiệu về mã hoá (Encryption)



MatKieng
07-05-2003, 11:15
Bài viết này sẽ giới thiệu cho các bạn chưa biết thế nào là mã hoá một số khái niệm căn bản.
1/Tại sao cần phải mã hoá?
Giả sử bạn có một lá thư cần gửi cho một người bạn (người yêu chẳng hạn), nhưng bạn lại không có thời gian và phương tiện để đến gặp người đó mà đưa tận tay, vậy bạn phải làm sao? À, bạn nhờ một người khác đưa giùm mình. Nhưng người này lỡ nhiều chuyện lấy thư của bạn ra đọc thì sao? Bạn sẽ mã hoá (encrypt) nó, tức là biến nó từ dạng bình thường ai cũng đọc được (gọi là plaintext) sang dạng mà chỉ có ĐÚNG người mới đọc được (ciphertext). Lúc này người đưa thư giùm bạn sẽ vẫn xem được thư của bạn nhưng chắc là sẽ không hiểu (hi vọng vậy) và người nhận thư của bạn sẽ giải mã (decrypt) nó về dạng plaintext để đọc.

2/Mã hoá làm việc như thế nào?
Để làm công việc mã hoá và giải mã thì cần phải có các khoá để mã hoá và khoá để giải mã. Để bạn dễ hiểu mình xin xét một ví dụ đơn giản sau đây: Julius Caesar (các bạn biết ông ta không?) khi gửi thư cho các tướng lĩnh của mình thì ông ấy không tin tưởng người đưa thư, vì vậy ông ta mã hoá bức thư của mình bằng cách dịch các chữ cái ABC... đi lên 3 kí tự, tức là A->D, B->E ... Vì vậy giả sử ông ta ra lệnh "ATTACK NOW" sẽ chuyển thành "DWWDFN QRZ", đến khi nhận được thư thì các vị tướng chỉ cần dịch ngược lại 3 kí tự thì sẽ ra được đúng thông điệp. Ở đây key chính là 3, bởi vì 3 là số chính để chúng ta mã hoá và giải mã.


Các bài viết sau mình sẽ đi vào chi tiết của kiểu mã hoá PGP (Pretty Good Privacy), đây là kiểu mã hoá mạnh được dùng trong các giao dịch điện tử. Để kết thúc bài viết này, mình có đoạn ciphertext này mong các bạn giải mã chơi cho vui "MFHP INJSIFSYNSMTH" với gợi ý là key nằm trong khoảng từ -10 đến 10 (các bạn nên lập trình cho máy giải chứ đừng giải bằng tay "phê" lắm á)

Terry
07-05-2003, 11:45
Hello matkieng,
MÌnh thì không biết lập trình nên chỉ toàn dùng software để phục vụ cho các mục đích. Nhưng mình thấy việc mã hoá để bảo mật cũng rất hay. Trong bộ softwares của Steganos cũng có tiện ích Steganos Crypt&Go (dành cho mã hoá email), và trong Business thì có nhiều tiện ích rất hay nhằm bảo mật cho credits card ******, các chuẩn mã hoá 16bit hiện nay được phõ biến rộng rãi, nên các trình mã hoá phục vụ cho người dùng cũng đa dang hơn. Internet càng ngày càng nguy hiểm, những email ko thoát khỏi các cặp mắt tò mò thì những trình ứng dụng luôn là yêu cầu tối ưu để bảo mật.
Mình cũng có nghe qua về PGP trong 1 tài liệu về bảo mật nhưng chưa được biết nhiều. Ủng hộ bài viết của bạn.
Xin giới thiệu website cho encrypt/decrypt Online:
http://sightkeys.com/encrypt/

MatKieng
08-05-2003, 15:35
Cám ơn bạn đã quan tâm đến bài viết của mình, mình rất vui khi nhận được góp ý từ phía các bạn. Có bạn nào rành về mã hoá thì có thể bổ sung thêm để bài viết của chúng ta được hay hơn và đúng đắng hơn.

Phần tiếp sau đây sẽ nói về mã hoá với khoá bí mật (secret key) và mã hoá với khoá công khai (public key)
1/Mã hoá với khoá bí mật: Như chúng ta thấy trong ví dụ về mã hoá theo kiểu Caesar, nếu như chúng ta biết được độ dịch chuyển của các kí tự thì chúng ta sẽ giải mã được văn bản gốc, hay nói một cách khác thì key dùng để mã hoá và giải mã là như nhau. Nếu trong việc trao đổi thông tin giữa những người đã biết với nhau từ trước, và đã có các quy ước với nhau về khoá dùng để mã hoá và giải mã thì chuyện an toàn cho thông tin không phải là một vấn đề, bởi vì chỉ cần truyền đi thông điệp đã được mã hoá, người nhận được sẽ giải mã nó ra theo khoá đã quy ước với nhau từ trước. Nhưng xét trường hợp việc trao đổi thông tin giữa những người chưa biết nhau trước, vậy thì phải truyền đi khoá để giải mã cho người nhận, và khoá này dĩ nhiên phải ở dạng plaintext, chứ nếu khoá được mã hoá luôn thì người nhận cũng đâu có biết khoá đâu mà mở! Vậy là trong quá trình truyền đi khoá này sẽ gặp vấn đề, bởi vì do nó ở dạng plaintext nên ai cũng đọc được, và một khi họ đã đọc được thì viêc giải mã văn bản cón lại khong còn là vấn đề nữa. Do tính không an toàn này mà đã ra đời phương pháp mã hoá với khoá công khai.
2/Mã hoá với khoá công khai: Ở đây mỗi người sẽ giữ 2 khoá, một khoá công khai cho mọi người biết (public key) và một khoá giữ riêng cho mình (private key). Chúng ta sẽ công bố public key của chúng ta cho người khác biết. Khi có việc truyền thông tin cần mã hoá đi, người gửi sẽ dùng public key của người nhận để mã hoá thông điệp, khi đến tay người nhận, người này sẽ dùng private key của mình để giài mã ngược thông điệp và đọc thông tin trong đó. Ở đây chúng ta thấy việc truyền các khoá trên mạng chỉ là truyền các khoá public, nhưng để giải mã thì phải có khoá private, do đó sẽ không còn lo sợ khả năng phải truyền khoá quan trọng trên một môi trường không an toàn như mạng Internet nữa.

goofy
11-05-2003, 11:48
Mình cũng mới bắt đầu tìm hiểu về mã hóa đây, định hỏi xem có ai tìm hiểu về cái này để học hỏi thì thấy topic của bạn :) . Mình chỉ mới đọc về DES và RSA thôi, mong là sẽ sớm được biết thêm về PGP.

MatKieng
16-05-2003, 22:32
Xin lỗi các bạn vì đã để những phần còn lại hơi bị lâu, bởi vì mình hơi bận học, ;)
Giới thiệu về PGP
PGP viết tắt của Pretty Good Privacy, là một kiểu mã hoá "lai" giữa public và private key để cho ra kết quả cuối cùng. Chúng ta hãy xem các giai đoạn mà PGP thực hiện.
1/Đầu tiên PGP sẽ nén file nguồn lại, việc nén này sẽ giúp cho quá trình truyền dữ liệu đi trên mạng nhanh hơn và dữ liệu cũng bị "bóp méo" đi, làm cho quá trình giải mã của những cryptanalysis (những người chuyên giải mã các đoạn dữ liệu được mã hoá) trở nên khó khăn hơn. Tại sao lại như vậy? Bạn có thể thấy là trong tiếng Anh thì chữ có xác suất xuất hiện cao nhất là e (còn trong tiếng Việt thì mình nghĩ là t, không biết có đúng không?) và dựa vào một số cái khác nũa thì những cryptanalysis có thể giải mã từ từ dữ liệu được mã hoá, quá trình nén dữ liệu tất nhiên là sẽ làm cho dữ liệu không còn như cũ nữa, làm cho sự "đoán mò" khó khăn hơn.
2/Sau đó, PGP sẽ tạo ra một khoá ngẫu nhiên gọi là session key, session key này sẽ tạo ra ngẫu nhiên theo các cú di chuyển chuột và các cú gõ phím của bạn, do đó chúng ta thấy là khó có thể có 2 session key giống nhau. PGP sẽ dùng session key này để mã hoá dữ liệu (đã được nén) bằng kiểu mã hoá thông thường (secret key, dĩ nhiên ở đây secret key chính là session key).
3/PGP sẽ mã hoá theo kiểu public key với session key này để tạo ra sản phẩm cuối cùng được gửi đi.
Ở đây chúng ta thấy PGP mã hoá vừa có secret key vùa có public key, sở dĩ như vậy là vì secret key mã hoá rất nhanh nên được dùng để mã hoá dữ liệu (kích thước lớn) và public key mã hoá chậm hơn nên được dùng để mã hoá session key.
Người nhận sau khi nhận được dữ liệu sẽ dùng private key của mình để giải mã tìm ra session key, sau đó dùng session key này để giải mã ra dữ liệu gốc!

koda
14-09-2003, 09:55
Vậy anh có biết thuật mã hóa của Sir Bacon,hôm trước em có vào rever-course gì đó nó cho bài tập về thuật toán này nhưng em ko biết làm ơn chỉ giúp với.
Cảm ơn.

MatKieng
14-09-2003, 23:20
Bạn có thể nói rõ hơn về bài tập đó được không? Nếu được bạn có thể đưa luôn ra URL của Website đó để mình tham khảo, nếu trong khả năng của mình thì mình sẵn sàng thôi, thân!

koda
15-09-2003, 20:39
Chào anh mắt kiếng,trang web đó là www.reverser-course.de , lúc em đăng kí tham gia thì nó cho 4 loại bài tập : crackme, reversme , funmath và cipher nếu giải được 1 bài thì cho lên 1 cấp.Nếu giải được 1 trong 2 bài crackme hoặc reversme thì mới cho làm thành viên. Nhưng yêu cầu trong bài cipher mới đáng nói không biết phải kiếm ở đâu ra nữa, khổ là hôm nay tụi admin của trang đó đi chơi hết nên em ko thể chép bài đó về được vậy hôm sau em sẽ chép ở nhà lên cho anh tham khảo hén.
chào anh, cảm ơn anh đã giúp.