Internet: Mã hóa và khóa công khai
Xin chào, tôi là Mia Gil-Epner, tôi học chuyên ngành Khoa học máy tính tại UC Berkeley và tôi làm việc
cho Bộ Quốc phòng, nơi tôi tìm cách đảm bảo thông tin được an toàn.
Internet là một hệ thống mở và công khai. Tất cả chúng ta đều gửi và nhận thông tin thông qua các đường dẫn và
kết nối chung. Nhưng mặc dù đó là một hệ thống mở, chúng ta vẫn trao đổi rất nhiều
dữ liệu riêng tư. Những thứ như số thẻ tín dụng, thông tin ngân hàng, mật khẩu và email.
Vậy tất cả những thứ riêng tư này được bảo mật như thế nào? Mọi loại dữ liệu đều có thể được bảo mật thông qua
quá trình gọi là mã hóa, tức xáo trộn hoặc biến đổi thông điệp để ẩn nội dung gốc.
Ngày nay, giải mã là quá trình sắp xếp lại để có thể đọc được thông điệp đó.
Đây là ý tưởng cơ bản và con người đã làm việc này hàng thế kỷ qua. Một trong những phương pháp mã hóa
phổ biến đầu tiên là Mật mã Caesar. Đặt theo tên của Julius Caesar, vị tướng người La Mã
đã mã hóa các mệnh lệnh quân sự của mình để đảm bảo nếu bị can thiệp, quân địch
cũng sẽ không đọc được những mệnh lệnh ấy. Mật mã Caesar là một Thuật toán thay thế
từng chữ cái trong thông điệp gốc bằng một chữ cái cách đó một số chữ cái nhất định
trong bảng chữ cái. Nếu đó là số chỉ có người gửi và người nhận được biết, số đó gọi là
chìa khóa. Nó cho phép người đọc giải mã được thông điệp bí mật. Ví dụ: Nếu thông điệp gốc là
"HELLO" thì khi dùng thuật toán Mật mã Caesar với chìa khóa là 5, thông điệp được mã hóa
sẽ là thế này… Để giải mã thông điệp, người nhận đơn giản sẽ dùng chìa khóa để đảo ngược
quá trình. Nhưng một vấn đề lớn của Mật mã Caesar chính là ai cũng có thể dễ dàng giải mã
hoặc bẻ khóa thông điệp được mã hóa bằng cách thử mọi chìa khóa khả dụng và trong bảng chữ cái tiếng Anh,
chỉ có 26 chữ cái, có nghĩa là bạn sẽ chỉ cần thử tối đa 26 chìa khóa để
giải mã thông điệp. Ngày nay, việc thử 26 chìa khóa khả dụng chẳng mấy khó khăn, chỉ mất tối đa
1 hoặc 2 giờ. Vậy hãy làm cho việc này khó hơn. Thay vì dịch chuyển mọi chữ cái theo cùng một số,
hãy dịch chuyển mỗi chữ cái theo một số khác nhau. Trong ví dụ này, chìa khóa mười chữ số cho biết số lượng
vị trí mỗi chữ cái liên tiếp sẽ được thay đổi để mã hóa thông điệp dài hơn. Sẽ rất khó
để đoán ra chìa khóa này. Sử dụng mã hóa 10 chữ số có thể tồn tại 10 tỷ kết quả là chìa khóa khả dụng.
Rõ ràng, đó là điều mà không con người nào có thể giải mã vì sẽ mất hàng thế kỷ.
Nhưng một máy tính bình thường ngày nay chỉ mất một vài giây để thử hết 10 tỷ khả năng.
Vậy, trong thế giới hiện đại, nơi kẻ xấu được trang bị máy tính thay vì bút chì,
làm sao để mã hóa thông điệp bảo mật tới mức việc bẻ khóa là quá khó? Giờ đây, quá khó nghĩa là
có quá nhiều khả năng cần tính toán trong khoảng thời gian hợp lý. Các giao tiếp bảo mật ngày nay
được mã hóa bằng các chìa khóa 256 bit. Điều đó đồng nghĩa với việc máy tính của kẻ xấu
can thiệp thông điệp của bạn cần phải thử chừng này phương án khả thi… cho đến khi tìm ra được
chìa khóa và bẻ khóa thông điệp. Ngay cả nếu bạn có 100.000 máy tính ưu việt và mỗi một máy
có thể thử một triệu tỷ chìa khóa mỗi giây sẽ mất khoảng hàng nghìn nghìn tỷ năm
mới thử hết các phương án, chỉ để bẻ khóa một thông điệp được bảo vệ bằng mã hóa 256 bit.
Tất nhiên, vi mạch máy tính sẽ nhanh hơn hai lần và nhỏ hơn một nửa sau mỗi năm. Nếu tốc độ
tiến triển theo cấp số nhân ấy cứ tiếp tục thì những bài toán hóc búa hôm nay sẽ có lời giải
chỉ sau vài trăm năm nữa và 256 bit sẽ không còn đủ an toàn nữa. Trên thực tế,
chúng ta đã phải tăng độ dài chìa khóa tiêu chuẩn để theo kịp tốc độ của máy tính.
Tin vui là dùng chìa khóa dài hơn sẽ không làm việc mã hóa thông điệp thêm khó khăn nhưng nó
sẽ tăng số lượng phán đoán phải đưa ra để bẻ khóa một mật mã lên theo cấp số nhân.
Trường hợp người gửi và người nhận dùng chung một chìa khóa để xáo trộn và sắp xếp lại thông điệp được gọi là
Mã hóa đối xứng. Giống như Mật mã Caesar, trong Mã hóa đối xứng, chìa khóa bí mật phải được
bí mật thống nhất từ trước bởi hai người. Điều này rất tiện cho con người nhưng Internet
là hệ thống mở và công khai nên hai máy tính không thể nào "gặp" riêng để thống nhất
chìa khóa bí mật. Thay vào đó, máy tính dùng các chìa khóa Mã hóa bất đối xứng, một chìa khóa công khai có thể
trao đổi với bất kỳ ai và một chìa khóa bảo mật giữ kín. Khóa công khai được dùng để mã hóa
dữ liệu và ai cũng có thể dùng nó để tạo thông điệp bí mật nhưng bí mật chỉ có thể được giải mã
bởi máy tính có quyền truy cập khóa bảo mật. Cơ chế hoạt động của nó liên quan đến vài phép toán mà chúng ta
sẽ chưa tìm hiểu vào lúc này. Cứ nghĩ thế này nhé, tưởng tượng bạn có một hộp thư cá nhân,
mọi người đều có thể bỏ thư vào nhưng họ cần có chìa khóa mới gửi được. Giờ bạn có thể tạo rất nhiều bản
chìa khóa gửi thư và gửi đến cho bạn bè hoặc thậm chí là công khai luôn chìa khóa ấy.
Bạn của bạn hoặc thậm chí người lạ có thể dùng chìa khóa công khai để tiếp cận hộp thư và bỏ thư
vào khe. Nhưng chỉ có bạn mới có thể mở hộp thư bằng chìa khóa bảo mật và gom hết tất cả
những lá thư bí mật bạn nhận được. Và bạn có thể gửi lại thư bảo mật cho bạn bè
bằng cách dùng chìa khóa gửi công khai vào hộp thư của họ. Bằng cách này, người ta có thể trao đổi thông điệp bảo mật
mà không cần phải thống nhất với nhau về chìa khóa bảo mật. Mã hóa bằng khóa công khai là nền tảng
cho mọi trao đổi thông tin bảo mật trên mạng Internet mở. Bao gồm cả các Giao thức Internet phổ biến như
SSL và TLS, giúp bảo vệ chúng ta khi chúng ta lướt web. Ngày nay, máy tính của bạn dùng khóa này
bất cứ khi nào bạn nhìn thấy một cái khóa nhỏ hoặc các chữ cái https trên thanh địa chỉ trình duyệt của bạn.
Điều này có nghĩa là máy tính của bạn đang dùng mã hóa khóa công khai để trao đổi thông tin an toàn với
trang web bạn đang truy cập. Khi ngày càng có nhiều người truy cập Internet, sẽ ngày càng có nhiều
dữ liệu riêng tư được trao đổi và nhu cầu bảo mật dữ liệu ấy sẽ ngày càng thêm quan trọng.
Và khi máy tính ngày càng thêm nhanh, chúng ta sẽ phải phát triển nhiều cách thức mới để
máy tính khó lòng phá vỡ các mã hóa. Đây là điều tôi đang làm và nó liên tục thay đổi.