Bài viết được post tại đây: http://portal.daynhauhoc.com/p/tan-man-ve-mat-ma-hien-dai-part-1/
#Tản mạn về Mật mã hiện đại (part 1)
Mật mã là một vấn đề gắn liền với suốt chiều dài lịch sử của con người và có thể nói là mật mã học đã đặt nền móng cho ngành khoa học máy tính phát triển. Hôm nay mình viết bài này xin chia sẻ một số kiến thức về mật mã hiện đại mà mình góp nhặt được, hi vọng bài viết này sẽ có ích
Con người từng nghĩ ra đủ loại mã hoá, rồi cũng chính con người cũng tìm đủ mọi cách để giải nó, đó là một cuộc chiến tay đôi rất sòng phẳng giữa bên tạo mã và bên giải mã, trận thua đau đớn nhất của bên tạo mã là không làm sao giải quyết được khâu phân phối chìa khoá giải mã, bạn tưởng tượng 2 thằng An và Bình buộc phải gửi 1 bức thư qua 1 đứa bạn có tính hay soi mói đời tư người khác tên là Chiến (thường thì trong mật mã người ta hay quy ước 2 thằng trao đổi thông tin là Alice và Bob còn nghe lén là Eve). An cho bức thư vào một cái hòm khoá kín, nhiệm vụ khó nhất bây giờ là làm sao đưa được cái hòm cho thằng Bình, rồi phải tìm cách đưa cả chìa khoá nữa chứ, không thì làm sao ông Bình ổng mở được, mà lại không có cách nào chuyển đồ được ngoài qua tay thằng Chiến...Làm sao giờ ta? An nghĩ....bạn cũng nghĩ thử xem...hm...hm...... :smile:Nghĩ ra chưa? Nếu bạn nghĩ ra rồi thì bạn rất thông minh đó , vì đây là ý tưởng mà bên tạo mã đã chờ từ rất lâu. Còn nếu bạn chưa nghĩ ra thì để mình giải thích nhé:
An là Alice còn Bình là Bob
Đầu tiên, An khoá cái hộp đó lại gửi cho Bình (tất nhiên là mọi hoạt động đều qua tay thằng Chiến hết), Bình sẽ làm gì đây, hehe, [spoiler]KHOÁ THÊM VÀO ĐÓ 1 Ổ KHOÁ NỮA![/spoiler] rồi gửi lại cho An, An sẽ mở khoá mà lúc đầu đã khoá, rồi gửi lại Bình, rồi Bình mở khoá còn lại bằng chìa khoá của mình vậy là xong. Ý tưởng khoá kép này là nền tảng tạo nên mật mã công khai, mã bất đối xứng được dùng rất nhiều ngay nay, tất nhiên là ý tưởng này còn sơ khai và cần nhiều thay đổi nữa để trở nên hiệu quả. Để toán học hoá ý tưởng thì các nhà khoa học sử dụng toán đồng dư để tạo ra hàm 1 chiều và nó là tiền thân của các hàm băm sau này, một ví dụ điển hình về hàm băm là mã md5, hiện nay đang được sử dụng rất nhiều. (hàm một chiều là hàm tạo ra mã thì dễ mà giải ngược lại thì cực khó)
Đến đây bạn có thể vỗ đùi:“Đó, đúng như mình nghĩ mà”, nhưng cũng có thể bạn đang nghĩ: “Haha, tôi còn ý tưởng nữa hay hơn nhiều”, đúng là có một ý tưởng nữa cũng rất hay, nó như sau:
Đơn giản là An sản xuất được 1 loại khoá bấm với một chìa khoá và rất nhiều ổ khoá giống hệt nhau, xong gửi cái ổ khoá đó cho tất cả mọi người, tất nhiên là gửi cả cho Bình, và rồi khi Bình hoặc bất kì ai muốn gửi thư cho An thì chỉ cần lấy cái khoá bấm đó bấm vào 1 cái hòm(trong hòm có bức thư cần gửi) xong gửi cho An, vì chìa khoá có mỗi An có nên việc trao đổi này là rất an toàn. (nếu vẫn không phải đáp án mà bạn nghĩ ra thì chia sẻ ở dưới nhá)
Khoá bấm là khoá kiểu này này
Về mặt ý tưởng thì ở thời đó nếu bạn nghĩ được đến đây đã đủ để tên bạn lưu danh sử sách rồi. Việc làm của bạn giờ chỉ là hiện thực hoá ý tưởng đó thành dạng toán học, cái chỉ là này cũng đã đủ để làm nhiều nhà khoa học thời đó mất ăn mất ngủ, nửa đêm vỗ gối nước mắt đầm đìa đó :, nhưng rồi cuối cùng một ngày đẹp dời 3 nhà khoa học dựa trên những ý tưởng này mà tạo nên được một loại mã hoá mới, cực mạnh, đó là mã RSA. Mã có hàm một chiều dựa trên sử dụng tích 2 số nguyên tố, điều này giải thích tại sao số nguyên tố được quan tâm rất nhiều, lâu lâu lại thấy có bạn đăng bài tập về số nguyên tố lên Dạy Nhậu Học để hỏi, mình từng nghĩ:" Cái số nguyên tố có thì cái gì hay đâu mà cứ bắt học nó làm quái gì nhỉ?", và cuối cùng mình cũng đã tìm ra câu trả lời. Bây giờ mà bạn tìm ra được một thuật toán phân tích một số thành tích 2 số nguyên tố với tốc độ nhanh gấp đôi hiện tại chẳng hạn, thì có thể bạn sẽ làm cả thế giới chao đảo ấy chứ (hư cấu chút ), vì mật mã hiện nay chủ yếu dựa theo cái mã RSA này.
Vậy thực sự thì mã RSA là như nào?
public key là chìa khoá công khai, private key là chìa khoá bí mật
Mỗi người sẽ có 2 chìa khoá mã hoá , 1 cái công khai, ai cũng có thể biết, 1 cái bí mật chỉ 1 người biết, khi An muốn gửi một bức thư cho Bình, An sẽ mã hoá bức thư đó theo mã hoá công khai của Bình, rồi gửi cho Bình (giai đoạn này giống như là bạn bấm cái khoá bấm vậy, bấm vào được mà đếch mở ra được ) , Bình sẽ dùng khoá chỉ mình Bình biết giải mã và vậy là xong. Đó là sức mạnh của mật mã không đồng bộ (người mã hoá được chưa chắc đã có khả năng giải mã). Mình chỉ dám nói sơ sơ như vậy thôi, còn chi tiết về mặt toán học thì bạn có thể google hoặc đọc thêm ở cuốn The code book (Simon Singh)
Thế tương lai ngành mật mã sẽ đi về đâu? Bên nào sẽ chiến thắng? Tạo mã hay giải mã? phần 2 của bài viết mình sẽ giúp các bạn phần nào trả lời được những câu hỏi này.
Bài viết này có tham khảo một số nội dung trong cuốn The code book (Simon Singh) và các tài liệu khác trên internet.
À một fun fact khá thú vị là Ian Fleming (người tạo ra James Bond - 007) cũng từng tham gia vào cuộc chiến tìm khoá mã này. Bạn biết giải pháp của ông là gì ông, không thèm giải toán gì sất, nhảy lên tàu người ta cướp khoá mã xong về :lol:
Đây là website xem kích cỡ mã RSA mà các nước trên thế giới sử dụng
http://indutny.github.io/collect-certs/
Phần 2 ở đây: Tản mạn về Mật mã hiện đại (part 2)