- Tệp ZIP chứa mã nguồn ANC Operation Vula được lưu dưới dạng có mật khẩu từ năm 1991 đã được giải mã, mở đường cho việc công bố mã liên lạc bí mật dùng để chống lại chế độ apartheid ở Nam Phi
- Mã này được dùng vào cuối thập niên 1980 để xây dựng mạng lưới ngầm của ANC bên trong Nam Phi, sử dụng máy tính 8-bit, âm DTMF, bộ ghép âm thanh và PowerBASIC để trao đổi các thông điệp mã hóa bằng one-time pad
- ZipCrypto của PKZIP đời đầu dễ bị tấn công biết trước bản rõ, và bằng bkcrack người ta đã tìm ra 12 byte bản rõ có thể dự đoán trong ZIP để khôi phục khóa
- Cuộc tấn công tận dụng mục Store không nén trong ALLBAS.ZIP, header PK của ZIP lồng bên trong, và tên tệp đầu tiên COMKEY.BAS; sau 23 phút đã thu được khóa
98e0f009 48a0b11a c70f8499 - RANDOM.BAS và TECOD.BAS sau khi giải mã đã được biên dịch và chạy trong DOSBox, cho thấy cách tạo dữ liệu ngẫu nhiên, mã hóa/giải mã tệp, sử dụng RAM disk và hủy dữ liệu khóa sau khi dùng
Vì sao mã của Operation Vula bị khóa
- Operation Vula là chiến dịch cuối thập niên 1980 nhằm đưa lãnh đạo ANC và vật tư vào Nam Phi, đồng thời xây dựng một mạng lưới ngầm kết nối các thành phần hoạt động trong nước
- Để liên lạc an toàn, họ dùng máy tính 8-bit, âm DTMF, bộ ghép âm thanh, nhiều thiết bị khác nhau và chương trình PowerBASIC để trao đổi thông điệp mã hóa one-time pad
- Tim Jenkin, người chủ yếu tạo ra hệ thống mật mã này, đã công bố mã gốc tại Vulacode GitHub, và mô tả chi tiết có trong Talking To Vula.pdf
- Lý do trực tiếp khiến việc công bố mã bị trì hoãn là một tệp ZIP có mật khẩu được tạo vào năm 1991
- Khi rời Anh để trở về Nam Phi, Tim Jenkin đã gom toàn bộ mã nguồn vào một tệp ZIP và đặt mật khẩu
- Sau đó ở Nam Phi không cần mở lại mã, và vài năm sau khi muốn mở ra thì ông không còn nhớ mật khẩu
- Một tệp có thể truy cập được là phiên bản rất sớm, còn lại thì không thể giải nén vì mật khẩu
Tệp PKZIP cũ và tấn công biết trước bản rõ
- Hai tệp được chuyển giao là ALLBAS.ZIP và CODMAY93.ZIP, cả hai đều được tạo bằng PKZIP đời đầu và có đặt mật khẩu
- Khi đó định dạng ZIP với ZipCrypto tồn tại tấn công biết trước bản rõ, và có thể dùng bản triển khai mã nguồn mở bkcrack
- Cuộc tấn công này cần dự đoán 12 byte bản rõ tại một vị trí đã biết bên trong tệp ZIP
- Trong ALLBAS.ZIP có nhiều tệp
.BAS,.INC,.ZIP,.EXE, và một số mục dùng phương thức nén Store- Mục Store là các tệp vốn đã ở dạng nhị phân nên không được nén, vì vậy có thể dự đoán bản rõ mà không cần khớp kết quả nén
- Bản thân tệp ZIP cũng được chứa dưới dạng mục Store, và tệp ZIP có header PK ở phần đầu nên rất phù hợp làm ứng viên bản rõ
Tìm ứng viên bản rõ: tên tệp đầu tiên trong ZIP bên trong
- Mục tiêu tấn công là tệp ZIP lồng bên trong OLDCOD.ZIP nằm trong ALLBAS.ZIP
- Trong header PK ở đầu tệp ZIP có cả độ dài tên tệp và độ dài trường bổ sung, nên nếu biết tên tệp đầu tiên thì có thể dựng bản rõ cần cho cuộc tấn công
- Nếu tên tệp dài ít nhất 8 ký tự, thì cùng với phần mở rộng như
.BAS,.INCvà các byte độ dài tên tệp, độ dài trường bổ sung, sẽ đủ 12 byte cần thiết - Trong trường hợp xấu nhất, cũng có thể brute-force tên tệp theo dạng chữ in hoa và số, tối đa 8 ký tự cộng phần mở rộng, nhưng thực tế không cần đến
- Tim Jenkin có một phiên bản khác của OLDCOD.ZIP và có thể cho biết tệp đầu tiên bên trong là COMKEY.BAS
Khôi phục khóa bằng bkcrack
- Một chương trình Perl đơn giản đã được viết để đưa COMKEY.BAS vào làm ứng viên bản rõ, rồi chạy tấn công theo dạng
bkcrack -C ALLBAS.ZIP -c OLDCOD.ZIP -p ... -o 26 -j 8 - Sau 23 phút, bkcrack tìm được các khóa sau
98e0f009 48a0b11a c70f8499
- Dùng cùng khóa đó để giải mã ALLBAS.ZIP và tạo ALLBAS-DECRYPTED.ZIP; khóa này cũng hoạt động với CODMAY93.ZIP để tạo CODMAY93-DECRYPTED.ZIP
- Phương án khác là tấn công các tệp ZIP lồng bên trong khác theo cách tương tự, và nếu vẫn thất bại thì thử brute-force tên tệp
- Ứng viên TECOD5.BAS được kiểm tra sau đó đã tìm ra cùng khóa chỉ trong 38 giây, cho thấy việc chọn bản rõ phù hợp ảnh hưởng lớn đến tốc độ tấn công
Chạy mã sau khi giải mã
- Hai chương trình đã được biên dịch và chạy bằng PowerBASIC trong DOSBox
- RANDOM.BAS: dùng để tạo đĩa số ngẫu nhiên phục vụ one-time pad
- TECOD.BAS: dùng để mã hóa và giải mã các thông điệp gửi qua email
- Mã đã biên dịch và các tệp thực thi tạo ra có tại jgc-vula-september-2024
- Mã được biên dịch bằng PowerBASIC Compiler Version 3.00b; TECOD.BAS hiển thị 2.575 câu lệnh và 2.329 dòng, còn RANDOM.BAS là 2.194 câu lệnh và 1.940 dòng
- RANDOM.EXE sử dụng ba kiểu thuật toán sinh số ngẫu nhiên để tạo dữ liệu ngẫu nhiên, trong đó một kiểu dựa trên khóa ngẫu nhiên do người dùng tự nhập
- TECOD.EXE được bảo vệ bằng mật khẩu, và mật khẩu nhúng trong phiên bản này là TIMBOBIMBO, được lưu rải thứ tự ký tự trong mã
- Tim Jenkin đã đưa mật khẩu này vào chương trình theo cách đơn giản nhưng có làm rối
- Mật khẩu khác nhau giữa các phiên bản chương trình được phân phát cho các thành viên ANC khác nhau
- Hướng dẫn dành cho người muốn tự chạy có trong TECOD_HLP.pdf
Những chi tiết được hé lộ về cách vận hành khi đó
- Ví dụ chạy thử cho thấy quy trình dùng RANDOM.EXE để tạo dữ liệu ngẫu nhiên cho khóa trong RANDATA.1, mã hóa PLAIN.TXT thành PLAIN.BIN, rồi giải mã ngược lại
- Mọi thao tác mật mã đều được thiết kế để thực hiện trên RAM disk
- Trong ví dụ mã hóa, các tệp chương trình
TECOD.EXEvàTECOD.CNFnằm trên đĩa mềm A:, đĩa dữ liệu chứa tệp khóa nằm ở B:, và RAM disk là R: - Ở bước mã hóa, tên tệp
RANDATA.1phải được đổi thành SNUM; còn ở bước giải mã,RANDATA.1trên B: phải mang tên RNUM - Chương trình có cả chức năng hủy dữ liệu khóa sau khi dùng, kiểm tra phân bố byte ngẫu nhiên được tạo ra, và nhấn mạnh việc sử dụng RAM disk
1 bình luận
Các ý kiến trên Hacker News
Điểm thú vị ở Vula là việc hệ thống thiếu tính dễ dùng rốt cuộc lại trở thành nguyên nhân dẫn đến thất bại
Ngay cả những nhà hoạt động cực kỳ tận tụy, đối đầu với một chế độ tàn bạo vì tự do, cũng không thể dùng hệ thống cho đúng
Tài liệu bị để lại mà không mã hóa, khóa thì có thể dễ dàng lấy được, còn phần mềm quá rườm rà đến mức một số liên lạc quan trọng được gửi dưới dạng văn bản thuần
Ai cũng biết việc thiết lập và dùng PGP đúng cách phiền phức thế nào, và suy cho cùng bảo mật chính là tính dễ dùng
Một bài viết thêm đôi chút về Vula: https://shkspr.mobi/blog/2014/01/the-hardest-problem-in-encr...
Trong đa số trường hợp, tính dễ dùng thường tác động theo hướng làm giảm mức độ bảo mật
Tôi đã xem bộ sinh số ngẫu nhiên cho one-time pad dùng cho bảo mật, và Melissa O'Neil hẳn sẽ thích nó. Gần như là PCG
Nó dùng bộ sinh đồng dư tuyến tính (LCG)
Randcủa hệ thống PowerBASIC để chọn một trong bộ hàmrand1-3mới, trong đó hai hàm dùng các LCG khác nhauhttps://github.com/Vulacode/RANDOM/blob/d6a1a1d694b22e6a115b...
Vì các bộ sinh số giả ngẫu nhiên dường như được seed bằng bộ sinh ngẫu nhiên của hệ thống, nên cuối cùng chỉ cần khôi phục seed ban đầu của LCG hệ thống là có thể dịch ngược one-time pad
Tôi không biết kích thước seed của LCG hệ thống, nhưng nếu là 32-bit thì có lẽ chỉ cần brute-force trạng thái seed rồi chạy phân tích entropy trên kết quả là có thể phá trong vòng một giờ
“Đừng tự chế mật mã” là quy tắc đầu tiên, nhưng trong bối cảnh cuối thập niên 80, khi đang xử lý một công nghệ mới rất ngầu, có lẽ điều đó trông như một ngoại lệ
Toàn bộ quá trình sụp đổ của chế độ apartheid ở Nam Phi khá thú vị. Tôi gần như không biết gì về khía cạnh này
Một sự thật thú vị là phong trào BDS (tẩy chay, thoái vốn, trừng phạt) bắt đầu từ đây, và khi đó đa số cho rằng apartheid sẽ không bao giờ chấm dứt
Nhưng áp lực được duy trì trong thời gian dài tại nhiều điểm gây sức ép khác nhau, tạo ra căng thẳng lớn, và điều đó dẫn đến sự sụp đổ
Việc công việc này được thực hiện trên Toshiba T-100 cũng khá thú vị; đó là một chiếc máy tính rất hay
Thú vị thật. Nam Phi đã trải qua rất nhiều chuyện. Hy vọng GNU hiện nay sẽ kéo đồng hồ tận thế lùi lại
Tác phẩm nên xem là Action Kommandant. Nó cho thấy một góc nhìn về cuộc đời của Ashley Kriel, một liệt sĩ và niềm tự hào của Bonteheuwel
Trong giờ tiếng Anh ở trung học, tôi biết đến Athol Fugard nhờ một giáo viên cấp tiến đã rời Nam Phi sang Canada để tránh sự giám sát trong thập niên 80, và điều đó đã mở rộng tầm mắt tôi
Chúc người dân Nam Phi may mắn. Một đất nước có nhiều người tài năng và tài nguyên thiên nhiên đáng lẽ phải được đối xử tốt hơn nhiều. Ít nhất thì có vẻ thời kỳ chính trị cứng nhắc bên trong ANC đã kết thúc
Mã Rust để brute-force: https://github.com/rhulha/ZipMcKracken
Operation Vula, máy tính 8-bit, âm DTMF, bộ ghép âm thanh — thú vị thậtCIA/NSA nhận ra dấu hiệu rằng Operation Vula được vận hành bằng Philips PX-1000 thương mại có DES tích hợp, nên đã hối lộ Philips để cài cửa hậu vào sản phẩm: https://www.cryptomuseum.com/crypto/philips/px1000/
Không dùng DES có cửa hậu, mà dùng one-time pad do tiếp viên hàng không vận chuyển bằng đĩa mềm đến từng bên
Nếu một đĩa mềm như vậy bị bắt ở Nam Phi, thì chỉ các tin nhắn của người nhận đó bị lộ, và cuối cùng chuyện này cũng có thể sớm bị phát hiện
Nhưng tạo khóa one-time pad bằng bộ sinh số giả ngẫu nhiên là một cách làm ngây thơ
Điểm cốt lõi của one-time pad là dùng khóa thật sự ngẫu nhiên để có được bảo mật đúng nghĩa. Với kiểu khóa được dùng ở đây, chỉ cần trao đổi seed là có thể tạo cục bộ, và như thế đã không cần đặt các tiếp viên vào nguy hiểm
Tôi hiểu là nhà phát triển tự học và còn học trong lúc làm, nhưng nếu xử lý những bí mật thật sự quan trọng thì không nên mắc sai lầm như vậy
Tuy vậy, tạo ra lượng lớn số ngẫu nhiên thật cũng không dễ. Cuối cùng có lẽ phải tự chế thiết bị phần cứng, vì phần lớn thiết bị thương mại rất có khả năng đã bị can thiệp
Nếu phải phá mật khẩu ZIP “cũ” và biết vài ký tự bên trong archive, thì không gì tốt hơn cái này: https://github.com/kimci86/bkcrack