Quantcast
Channel: Blog Khoa Học Máy Tính » thaidn
Viewing all 11 articles
Browse latest View live

Riêng tư trên Internet

$
0
0

Chép lại đây bài trả lời phỏng vấn một tạp chí về sự riêng tư trên Internet. Bài này dài hơn bài đăng báo, vì tôi biết bài đăng báo sẽ bị cắt.

Xin chào anh, hiện nhiều ý kiến lo lắng rằng việc sử dụng quá nhiều các website nước ngoài từ mạng xã hội đến các công cụ tìm kiếm sẽ làm thông tin người dùng Việt Nam mất an toàn. Ý kiến của anh như thế nào về vấn đề này?

Tôi hiểu câu hỏi của anh là việc sử dụng các sản phẩm và dịch vụ của các công ty nước ngoài có thể khiến cho thông tin cá nhân của người dùng Việt Nam bị khai thác và lợi dụng bởi các công ty này. Tôi nghĩ việc này không hẳn là xấu 100%.

Trước tiên, tôi nghĩ đây là sự công bằng. Các công ty như Google hay Facebook cung cấp dịch vụ của họ hoàn toàn miễn phí cho tất cả mọi người. Đổi lại các công ty này yêu cầu được quyền sử dụng thông tin mà chúng ta cung cấp cho họ để kiếm tiền. Cách họ kiếm tiền hầu hết cũng xoay quanh việc hiển thị quảng cáo và tôi thấy việc này cũng không gây hại đến sự an toàn của người dùng.

Ngoài ra, dữ liệu mà chúng ta cung cấp thường được sử dụng để phục vụ lại chính chúng ta mà thôi. Chẳng hạn như Facebook nhìn vào danh sách bạn bè, sở thích, thói quen… để giới thiệu bạn mới hoặc tìm bạn cũ cho người dùng. Thực sự thì “cá nhân hóa” là một trong những cách chăm sóc khách hàng cổ xưa nhất và được chấp nhận rộng rãi trên thế giới. Ai mà không thích khi vừa vào một quán ăn thân quen nào đó, không cần nói gì thì người ta đã biết mình muốn ăn gì rồi?

Đây là những cách khai thác mà chúng ta có thể quan sát được. Cái khó của việc đánh giá rủi ro trong việc bị thu thập thông tin là chúng ta không biết các công ty còn làm gì khác nữa không. Nhìn chung chúng ta không biết các công ty thu thập những thông tin gì, sử dụng chúng như thế nào và ai được quyền truy cập vào những thông tin đó. Công bằng mà nói thì hầu hết các công ty đều trả lời các câu hỏi này trong “chính sách riêng tư” (privacy policy) của họ. Vấn đề là người dùng không có cách nào kiểm tra trực tiếp cả. Thành ra thay vì hỏi “Có an toàn hay không?” thì tôi nghĩ mỗi người phải tự hỏi “Tôi có nên tin vào công ty này hay không?”.

Đến lúc này người ta mới giật mình rằng, quá nhiều thông tin cá nhân, quá nhiều hành vi của người dùng Việt Nam có khả năng bị theo dõi một cách dễ dàng. Theo anh có quá muộn để người dùng sống “khép kín” hơn không?

Tôi nghĩ là không. Tôi nghĩ việc đơn giản có thể làm ngay là ngưng hoặc hạn chế sử dụng các mạng xã hội. Việc này không khó như nhiều người nghĩ. Tôi đã xóa tài khoản Facebook của tôi từ hơn hai năm nay và đến giờ tôi không thấy có khó khăn gì trong việc trao đổi, chia sẻ với bạn bè, người thân.

Cũng cần phải nói rõ là khi anh kết nối với một ai đó trên Facebook, nghĩa là anh cung cấp cho họ (và nhiều đối tượng khác) cái quyền được mặc nhiên truy cập thông tin cá nhân của anh bất kỳ lúc nào họ muốn mà không cần sự đồng ý của anh. Anh ăn gì, làm gì, ở đâu, với ai… họ điều biết. Đây là một sự tin tưởng tuyệt đối, mà trước giờ chúng ta chỉ trao cho những người thân sống trong cùng một nhà. Rõ ràng nguồn gốc của mọi rủi ro là ở đây: trao quá nhiều quyền cho những đối tượng không đáng tin. Chưa khi nào và chưa có nơi nào chúng ta cho phép người lạ xông vào đời sống riêng tư của mình dễ dàng như bây giờ trên các mạng xã hội.

Thử hình dung anh có cái nhà và bất kỳ khách đến chơi nào cũng được cấp chìa khóa để họ muốn vào nhà lúc nào thì vào, bất kể anh có muốn hay không. Mấy ông cảnh sát cũng có thể được cấp một chìa như thế. Ngoài khách đã được phát chìa và cảnh sát ra thì có thể còn nhiều đối tượng khác có chìa vào nhà anh mà anh hoàn toàn không biết. Anh có còn muốn sống trong một căn nhà như thế không? Sử dụng các mạng xã hội cũng tương tự như vậy.

Đương nhiên chúng ta có thể kiểm soát thông tin mà chúng ta chia sẻ trên các mạng xã hội, nhưng tôi cho rằng đây là việc làm không đơn giản, vì bản chất của các mạng xã hội là để chia sẻ thông tin. Ví dụ như anh không muốn người khác biết anh đi chơi ở đâu vào dịp cuối tuần, nhưng người đi cùng với anh có thể vô tình tiết lộ thông tin này vì họ lỡ “tag” anh vào một tấm hình chụp chung. Thành ra tôi thấy khó mà sống “khép kín” nếu còn sử dụng các mạng xã hội.

Người dùng Việt Nam có xu hướng “chuộng” hàng ngoại, từ mạng xã hội, công cụ tìm kiếm đến các trang hỏi đáp. Theo anh việc bảo vệ thông tin cá nhân nhiều hơn có khiến người dùng quay lại với hàng nội?

Tôi không nghĩ sử dụng các dịch vụ trong nước đem lại sự an toàn cao hơn cho người dùng Việt Nam.

Ngoài các công ty ra thì có một đối tượng rất quan tâm đến thông tin cá nhân của chúng ta là các chính phủ. Twitter tiết lộ là trong năm vừa rồi họ nhận được hơn 800 yêu cầu cung cấp thông tin người dùng từ các chính phủ và họ đáp ứng hoàn toàn hay một phần 63% yêu cầu đó. Đối với Google thì từ tháng 7/2011 đến hết tháng 12/2011, họ nhận được hơn 18.000 yêu cầu cung cấp thông tin từ 28 nước trên thế giới.

Các dịch vụ mà người Việt Nam sử dụng phổ biến đa số là của các công ty Mỹ và tôi không nghĩ là chính phủ Mỹ quan tâm đến thông tin cá nhân của người Việt Nam hơn chính phủ Việt Nam. Việt Nam cũng thiếu các công cụ luật pháp và các nhóm quan sát độc lập bảo vệ quyền riêng tư của công dân. Theo tôi biết thì chưa từng có công ty Việt Nam nào từ chối cung cấp thông tin người dùng khi được chính phủ yêu cầu. Ở Mỹ thì nhiều công ty sẵn sàng ra tòa để từ chối cung cấp thông tin cho các cơ quan chính phủ, nếu như yêu cầu đó bất hợp pháp. Ví dụ như vừa rồi Twitter từ chối cung cấp thông tin về một người biểu tình trong vụ “Chiếm đóng phố Wall”. Họ bị tòa xử thua, nhưng họ sẽ kháng cáo ở cấp cao hơn. Ngược lại, ở Việt Nam thì việc các công ty viễn thông và Internet cung cấp thông tin hoặc hỗ trợ chính phủ theo dõi người dùng là “chuyện thường ngày ở huyện”.

Các chính phủ thường có cách biện hộ thế này: nếu anh không có gì để giấu thì việc chính phủ có dòm ngó thông tin cá nhân của anh cũng không gây ra nguy hiểm gì cho anh cả. Ở đây chúng ta lại quay lại vấn đề mà tôi nêu ở trên: không ai biết chính phủ làm gì, chia sẻ với ai, xử lý như thế nào và kết luận ra sao từ những dữ liệu mà họ thu thập được. Cuối cùng rồi câu hỏi vẫn là: liệu [chính phủ] có đáng tin hay không?

Câu hỏi này không chỉ áp dụng cho các công ty và các chính phủ mà còn áp dụng cho bất kỳ người hoặc tổ chức nào mà chúng ta chia sẻ thông tin cá nhân. Ví dụ như mặc dù anh rất cẩn thận trong việc thiết lập chế độ riêng tư cho tài khoản Facebook của anh (chẳng hạn như chỉ kết nối với những người thân quen và tuyệt đối không sử dụng các ứng dụng không rõ nguồn gốc) nhưng sự riêng tư của anh phụ thuộc hoàn toàn vào những người mà anh kết nối. Như tôi đã nói ở trên, mỗi kết nối mặc nhiên được phép truy cập thông tin cá nhân của anh bất kỳ lúc nào mà họ muốn. Chỉ cần một người trong số đó bất cẩn cài đặt một ứng dụng thu thập thông tin thì toàn bộ thông tin cá nhân của anh sẽ bị lộ ra ngoài. Mà một khi đã bị lộ thì anh không có cách nào để phát hiện, nói chi là thu hồi lại được thông tin đã mất.

Bản thân tôi khi đọc xong những email quan trọng, chứa thông tin cá nhân thì việc đầu tiên tôi làm thường là xóa chúng đi. Tôi nghĩ đơn giản nếu tôi không cần đến chúng nữa thì không việc gì phải lưu lại, để rồi vô tình tạo điều kiện cho một ai đó, trong tương lai, tiếp cận được những thông tin này. Những mạng xã hội như Facebook lưu trữ một lượng thông tin khổng lồ về mỗi người trong chúng ta. Phần lớn những thông tin đó không còn đem lại giá trị gì cho người sở hữu chúng. Nếu chúng ta không dùng đến, mà vẫn lưu lại thì chỉ có cách giải thích duy nhất là chúng ta muốn “để dành” cho người khác sử dụng.

Do đó câu hỏi cho mỗi chúng ta không phải là dùng hàng nội hay hàng ngoại, mà có lẽ là: có nên “để dành” thông tin cá nhân để khi nào cần thì chị Tám, anh Bảy, công ty X, chính phủ Y ngang nhiên nhảy vào khai thác không?


TetCon 2013 – Call for Papers

$
0
0

Đến hẹn lại lên, hội thảo TetCon 2013 sẽ được tổ chức vào ngày 11/1/2013 tại Tp.HCM (địa điểm cụ thể sẽ được thông báo sau). Hôm nay chúng tôi bắt đầu nhận bài tham luận tại địa chỉ https://sites.google.com/a/tetcon.org/2013/cfp.

Đề tài
Tham luận có thể thuộc các chủ đề như:
* Điện toán đám mây.
* Thương mại điện tử.
* Thiết bị di động.
* Tấn công từ chối dịch vụ.
* Trình duyệt web và HTML5.
* Ứng dụng web và các khung ứng dụng.
* Phần mềm độc hại và an toàn cho người dùng cuối.
* Phòng chống và phát hiện xâm nhập.
* Theo dõi và quản trị an toàn mạng.

Chúng tôi khuyến khích những tham luận bàn về các đề tài như:
* An toàn trong sử dụng điện toán đám mây.
* Đảm bảo an toàn cho một trang ngân hàng điện tử, thanh toán điện tử hoặc website buôn bán sản phẩm.
* Lập trình an toàn trên Android hoặc iOS.
* Những tính năng mới trong HTML5 và ảnh hưởng của chúng đến sự an toàn của web
* Kiện toàn an ninh cho những khung ứng dụng quen thuộc như .NET, LAMP, Ruby On Rails, Django, v.v.
* Bài học rút ra từ những lần bị tấn công từ chối dịch vụ.
* Kiện toàn an ninh cho hệ thống mạng nội bộ doanh nghiệp.
* Kinh nghiệm xây dựng và triển khai các hệ thống phòng chống và phát hiện xâm nhập.

Nếu bạn có những kinh nghiệm thiết thực rút ra từ thực tiễn đảm bảo an toàn thông tin cho sản phẩm hoặc hệ thống thông tin của doanh nghiệp thì hãy gửi cho chúng tôi! Nếu được chấp thuận, hội đồng chuyên môn sẽ góp ý, hỗ trợ bạn hoàn thiện tham luận và bạn sẽ có tối đa 45′, bao gồm thời gian hỏi đáp, để trình bày ở hội thảo. Lưu ý chúng tôi không chấp nhận những bài quảng cáo sản phẩm hay dịch vụ.

Ngày quan trọng
* Hạn chót gửi đề tài: 3/12/2012.
* Ngày công bố chương trình: 10/12/2012.
* Ngày hội thảo: 11/1/2013.

Quyền lợi diễn giả
Nếu được chọn làm diễn giả, bạn sẽ được:
* Quà tặng của BTC.
* Nếu bạn không ở Tp.HCM, có thể chúng tôi sẽ đài thọ vé máy bay khứ hồi và khách sạn.

Tấn công CRIME

$
0
0

Tấn công CRIME là một tấn công mới nhắm vào giao thức SSL/TLS mà anh Juliano Rizzo và tôi vừa trình bày ở hội thảo ekoparty 2012 cách đây vài ngày.

Khi nào có thời gian tôi sẽ viết một bài mô tả chi tiết, tạm thời mời xem slides ở đây. Nếu anh chị nào có thắc mắc gì thì có thể đặt câu hỏi ở trên slides hoặc ở đây cũng được.

Hai tham luận “nặng ký” tại TetCon 2013

$
0
0

CFP của TetCon 2013 đã đi được nửa chặng đường. Tổng kết lại thì có một tin vui và một tin buồn.

Tin buồn là số lượng bài mà chúng tôi nhận được từ cộng đồng trong nước ít và chất lượng chưa cao. Đây không phải là một tin quá ngạc nhiên, bởi số lượng người làm an toàn thông tin ở Việt Nam vẫn rất ít. Chúng ta có Hiệp hội ATTT, nhưng trong đó có nhiều CISO hơn là chuyên gia kỹ thuật lành nghề. Chúng ta có giải thưởng ATTT hàng năm, nhưng giải này trao cho các CISO, chứ không phải dành cho các hacker. Đây cũng là tình trạng chung của ngành công nghệ thông tin ở Việt Nam: quá nhiều nhà quản lý và quá ít kỹ sư giỏi.

Một điểm mới trong hội thảo năm nay là sẽ có một số diễn giả người nước ngoài, trình bày bằng tiếng Anh -1-. Việc mở rộng TetCon cho các diễn giả nước ngoài vừa giúp giải quyết vấn đề thiếu bài, vừa đem đến cho TetCon những cập nhật mới nhất trong ngành an toàn thông tin trên thế giới. Dẫu vậy nếu “quốc tế hóa” TetCon quá sớm và quá nhanh, chúng tôi e rằng cộng đồng trong nước sẽ không theo kịp, dẫn dẫn đến tình trạng diễn giả nước ngoài nói những vấn đề mà người nghe không hiểu hoặc không quan tâm. Do đó chúng tôi vẫn ưu tiên cho các diễn giả người Việt với các đề tài thiết thực, gần gũi với cộng đồng trong nước. Với diễn giả nước ngoài chúng tôi hoặc là mời trực tiếp, không thông qua CFP; hoặc là “chọn mặt gửi CFP” – chỉ gửi CFP đến một nhóm nhỏ chọn lọc.

Tin vui là chúng tôi nhận được một số bài chất lượng cao từ nhóm diễn giả này, trong đó nổi bật là bài của Eduardo Vela và Bruce Dang đến từ Google và Microsoft.

Bruce Dang là lãnh đạo đội “penetration testing” tại Microsoft, chịu trách nhiệm về sự an toàn của tất cả những sản phẩm phần mềm và phần cứng mới. Trong những năm qua, anh ấy đã trình bày về kỹ thuật phân tích mã khai thác lỗi trong Microsoft Officedịch ngược mã nhân hệ điều hành và nghiên cứu về virút máy tính Stuxnet. Chuyên môn của anh là về nhân Windows và dịch ngược mã. Tại TetCon 2013, Bruce sẽ trình bày về những kỹ thuật chống khai thác lỗi (exploit mitigations) trên Windows 8. Đây là một đề tài chuyên sâu, dành cho những ai thích dịch ngược mã và khai thác lỗi. Điều thú vị là anh Bruce là người Mỹ gốc Việt, nêu rất có thể anh ấy sẽ trình bày bằng tiếng Việt ;-).

Eduardo Vela là đồng nghiệp của tôi ở Google và là chuyên gia hàng đầu thế giới về an toàn web. Ở đội của tôi anh ấy là một “go-to guy” mà nhiều người phải hỏi ý kiến khi “đụng” các vấn đề về an toàn trình duyệt (browser security) và ứng dụng web (web application security). Eduardo còn là một lập trình viên JavaScript siêu hạng và là đồng tác giả Web Application Obfuscation, cuốn sách được đánh giá là đã “đưa tấn công trình duyệt lên một tầm cao mới”. Thú thật là mỗi lần nói chuyện với Eduardo xong là tôi lại cảm thấy không an tâm duyệt web :-(. Tại TetCon 2013, Eduardo sẽ nói về những quyết định sai lầm (về mặt an toàn) khi người ta thiết kế WWW và những nỗ lực của anh ấy và đồng nghiệp để khắc phục những sai lầm đó. Tôi nghĩ đây là một đề tài vừa thiết thực vừa không quá khó nắm bắt, phù hợp với tất cả mọi người.

Ban tổ chức sẽ cập nhật thông tin mới nhất về chương trình TetCon 2013 tại đâyHạn chót để gửi bài đến TetCon 2013 là ngày 3/12/2012. Trong tuần tới chúng tôi sẽ có thông báo chính thức về thời gian, địa điểm và mở hệ thống để đăng ký tham dự.

Để tổ chức được TetCon với giá vé thấp nhưng vẫn đảm bảo được chất lượng của các tham luận, ban tổ chức rất hi vọng sẽ nhận được sự hỗ trợ về mặt tài chính của các cá nhân, doanh nghiệp, tổ chức trong và ngoài nước. Mời xem ở đây để biết thêm thông tin về quyền lợi của nhà tài trợ.

-1- Nếu điều kiện thuận lợi, ban tổ chức sẽ thuê người dịch cabin thông dịch trực tiếp những tham luận này.

Code này làm gì?

$
0
0

Tham số đầu vào là một chuỗi ASCII 8-bit.

push ebp
mov ebp, esp
push ebx
mov ebx, [ebp + 8]
mov eax, ebx
_loop:
mov edx, [eax]
add eax, 4
lea ecx, [edx - 01010101h]
not edx
and ecx, edx
test ecx, 80808080h
jz _loop
test ecx, 8080h
jnz _label
shr ecx, 10h
add eax, 2
_label:
add cl, cl
sbb eax, 3
sub eax, ebx
pop ebx
leave
ret

Code ban đầu rất gọn (tìm thấy trong một mẫu virút), tôi sửa lại (và làm cho nó xấu đi) để có thể biên dịch với NASM. Câu hỏi phụ: tại sao lại viết như thế này mà không viết kiểu bình thường?

Những toilet không cửa hay là tại sao phải biết thiết kế

$
0
0

Tôi rất thích đoạn phim này. Có lẽ là do tôi đồng cảm với nhân vật. Không hẳn là tôi bị hội chứng sợ dơ, nhưng tôi rất ngán các nhà vệ sinh có cửa nắm thế này và hơn một lần tôi cũng đứng chờ có người mở cửa vào để đi ra mà không phải chạm tay :-).

Tôi bắt đầu chú ý đến thiết kế của các toilet công cộng từ cách đây vài năm. Tôi thấy thiết kế toilet không phải chuyện đơn giản. Có rất nhiều vấn đề, đôi khi rất nhỏ thôi, mà nếu làm không tốt sẽ có thể gây ảnh hưởng đến sức khỏe của nhiều người.


Một toilet thiết kế tốt phải touch-free, nghĩa là người ta đi ra, đi vào, ngồi xuống, xả hàng, đứng lên, rửa tay, lau tay v.v. tất tần tật đều không phải chạm vào bất kỳ vật gì cả. Nếu phải chạm thì việc chạm đó phải diễn ra trước khi người ta rửa tay hoặc là phải cung cấp giấy lót tay khi chạm vào đâu đó.

Quan trọng nhất là cửa ra vào. Cách thiết kế tốt nhất là không cửa. Đây cũng là cách thiết kế thường thấy của toilet ở các sân bay. Nếu lỡ chẳng may đã làm cửa (do không đủ không gian), thì phải nghĩ đến chuyện làm sao người ta có thể mở cửa mà không bị dơ tay. Có nhiều cách để làm, mỗi cách có ưu khuyết riêng.

Ví dụ như thiết kế để cửa có thể được mở bằng cách đẩy ra. Lúc này người ta có thể dùng vai hoặc chân để mở cửa. Mở cửa ra ngoài hay vô trong cũng là một câu hỏi thú vị của thiết kế các toilet công cộng.

Một cách làm đơn giản hơn là đặt giấy lót tay ở cạnh cửa ra vào, để khách có thể dùng khi mở cửa. Lúc này phải chú ý đặt một thùng rác ngay cạnh đó, không thôi sẽ gây trở ngại cho khách không biết vứt giấy ở đâu.

Còn nhiều vấn đề nữa, nhưng tôi nghĩ bạn đã hiểu tại sao tôi nói thiết kế toilet không phải chuyện đơn giản. Không chỉ riêng toilet, mà bất kỳ vật dụng hàng ngày nào cũng đòi hỏi một sự tỉ mỉ, tinh tế và sáng tạo trong thiết kế, nếu muốn vừa đáp ứng yêu cầu của người sử dụng vừa bảo vệ được sức khỏe của họ.

Một thiết kế tốt phải bám sát thực tế. Trước khi phát hành sản phẩm, người ta thường mời các nhiều nhóm khách hàng khác nhau đến sử dụng thử sản phẩm, quay phim lại rồi từ đó phân tích và điều chỉnh sản phẩm cho đơn giản hay an toàn hơn. Khi thiết kế không tính đến sản phẩm được sử dụng ra sao trong thực tế thì sản phẩm sẽ bị dùng sai, gây ra những trở ngại, đôi khi nguy hiểm đến sức khỏe của nhiều người.

Ví dụ như chiếc pô xe máy. Tôi thấy đây là một thiết kế cực tồi và hậu quả là tôi chưa từng gặp ai ở Việt Nam mà không bị phỏng pô xe một lần trong đời. Tôi không hiểu sao sau bao nhiêu đó năm và bao nhiêu vụ tai nạn như vậy, mà những công ty sản xuất xe máy vẫn không giải quyết vấn đề này. Thậm chí nhiều công ty còn làm cho nó trầm trọng hơn, khi thiết kế phần đích xe cao hơn phần đầu (vì lý do thẩm mỹ), khiến cho những người ngồi sau xe, do phải với chân xuống đất, càng dễ chạm vào pô khi xuống xe.

Ngược lại thiết kế tốt sẽ giúp sản phẩm đơn giản, dễ sử dụng, khó sử dụng sai và không gây nguy hiểm cho người dùng. Có rất nhiều vật dụng không cần ai chỉ, không cần phải xem hướng dẫn sử dụng nhưng chúng ta vẫn có thể sử dụng thành thạo ngay từ lần đầu tiên, ví dụ như chiếc điện thoại để bàn. Điều mà ít ai biết là để thiết kế ra được một sản phẩm như thế, người ta đã phải nghiên cứu và thử nghiệm rất lâu.

Hồi TetCon 2013 có bạn sinh viên hỏi tôi là ngoài rèn luyện các kỹ năng liên quan mật thiết đến ngành an toàn thông tin như lập trình, hệ điều hành, mạng, v.v. thì còn cần phải biết thêm gì nữa không. Tôi có nói là nên đọc thêm về thiết kế. Lý do thì đã nói nãy giờ: thiết kế có ảnh hưởng trực tiếp đến usability (dịch là tính khả dụng?) của sản phẩm. Một đồng nghiệp của tôi từng nói rằng chỉ có thằng điên mới không quan tâm đến usability khi làm an toàn thông tin.

Thông thường thì sản phẩm càng có nhiều tính năng an toàn, càng có nhiều lớp bảo vệ thì usability càng kém đi. Ví dụ như nhà có nhiều cửa thì sẽ càng an toàn, nhưng mỗi khi ra vào lại phải mở khoá cửa nhiều lần, rất bất tiện. Nhiệm vụ của người kỹ sư là phải làm sao cân bằng được giữa security và usability. Đó chính là thiết kế.

Một thiết kế tồi sẽ khiến cho người dùng khó chịu và tìm cách luồn lách để làm được việc họ muốn làm mà không phải đi xuyên qua các bước kiểm tra an toàn, bất kể nguy hiểm thế nào. Lúc này các tính năng an toàn đã bị vô hiệu hóa bởi chính đối tượng mà chúng cần phải bảo vệ. Đây là một thất bại của người kỹ sư.

Thiết kế tồi còn khiến cho người dùng dễ mắc sai lầm. Ai sử dụng Microsoft Windows hay bất kỳ hệ điều hành nào khác chắc hẳn đều đã gặp các thông báo cài đặt bảng vá hay nâng cấp mới. Đây là một thiết kế rất dở, bởi lẽ nó yêu cầu người dùng đưa ra một quyết định rất quan trọng, nhưng quên mất rằng phần lớn chúng ta không thể phân biệt được đâu là một thông báo của hệ điều hành, đâu là thông báo giả danh của bọn lừa đảo. Tôi nghĩ Chrome làm rất tốt ở chỗ này, khi họ âm thầm cập nhật và người dùng chỉ cần nhấn một nút hoặc tắt trình duyệt mở lại là có ngay bản mới nhất.

Đọc cái gì bây giờ để hiểu thêm về thiết kế?

Bài báo kinh điển Why Johnny can’t encrypt của Whitten và Tygar chỉ ra rằng những tính năng an toàn phải được thiết kế đặc biệt hơn các tính năng khác nếu không người sử dụng sẽ không hiểu hoặc không biết cách sử dụng chúng. Sau bài báo này của Whitten và Tygar, đã có rất rất nhiều nghiên cứu khác tập trung vào đề tài usable security. Những ai quan tâm có thể xem thêm cuốn Security Engineering của Peter Gutmann.

Một cuốn sách rất tốt về thiết kế nên đọc là The Design of Everyday Things. Đọc nó rồi bạn sẽ không còn bao giờ đi tè trong bình yên được nữa :-). Về thiết kế phần mềm và thiết kế web, thì nên tìm đọc những cuốn kinh điển như Don’t Make Me Think, Designing The Obvious, hoặc các bài viết về thiết kế của Joel Spolsky và sách của Jakob Nielsen.

“Không quản lý được về an ninh”

$
0
0

Trích từ đây:

[…]ông Vương Quang Khải, Phó Tổng Giám đốc Công ty VNG cũng cho rằng, các dịch vụ trong nước của VNG như Zing Mail, Zing Me… tuân theo rất nhiều chế tài của cơ quan quản lý trong khi các dịch vụ tương tự của nước ngoài như Yahoo Mail, Gmail, Facebook… thì không gặp phải bất cứ chế tài quản lý nào cả. Từ đó dẫn đến việc người dùng sẽ thích và sử dụng các dịch vụ nước ngoài vì không bị quản lý. VNG hi vọng thời gian tới sẽ có quy định để các doanh nghiệp trong và ngoài nước cùng “chơi” theo một luật để giúp CNTT Việt Nam phát triển. “Nếu cơ quan quản lý tiếp tục quản lý doanh nghiệp nội và ngoại như trên môi trường web thì VNG lo ngại chúng ta sẽ lại thua tiếp một lần nữa trên thị trường di động (mobile), giống như với thị trường mạng xã hội, máy tìm kiếm, email… dẫn đến thất thu về thuế và không quản lý được về an ninh”, ông Khải nhấn mạnh.

Quản lý an ninh là làm gì? Khoản 4, Điều 55 của Dự thảo nghị định quản lý Internet có quy định trách nhiệm của những công ty VNG như thế này (tôi in đậm những chỗ bên dưới, văn bản góc không có):

Điều 55. Trách nhiệm bảo đảm an ninh quốc gia, trật tự an toàn xã hội và phòng chống tội phạm trên mạng

4. Trách nhiệm của doanh nghiệp cung cấp dịch vụ Internet, viễn thông và nội dung thông tin trên mạng.

a. Triển khai các giải pháp, trang thiết bị kỹ thuật theo quy định của Bộ Công an để lưu trữ thông tin đưa vào, truyền đi trên mạng; ngăn chặn việc truy cập, truyền đưa thông tin có nội dung vi phạm Điều 5 của Nghị định này.

b. Xây dựng, ban hành quy định vận hành, khai thác, sử dụng dịch vụ Internet và nội dung thông tin trên mạng, Tổ chức việc đăng ký, quản lý và sử dụng thông tin cá nhân trên mạng theo quy định của Bộ Công an. Tuyên truyền, hướng dẫn, kiểm tra việc thực hiện đối với các đại lý Internet, người sử dụng dịch vụ, cán bộ, nhân viên trong nội bộ doanh nghiệp.

c. Cung cấp thông tin, phối hợp với đơn vị chức năng của Bộ Công an, các cơ quan Nhà nước có thẩm quyền thực hiện việc quản lý, kiểm tra, giám sát, phát hiện, ngăn chặn và xử lý các hành vi lợi dụng Internet, nội dung thông tin trên mạng vào hoạt động xâm phạm an ninh quốc gia và trật tự an toàn xã hội.

d. Ngừng ngay việc cung cấp dịch vụ Internet và thông tin trên mạng đối với các chủ thể lợi dụng các dịch vụ này để hoạt động chống lại Nhà nước Cộng hoà Xã hội chủ nghĩa Việt Nam, gây phương hại đến an ninh quốc gia khi có yêu cầu của cơ quan quản lý nhà nước có thẩm quyền.

e. Bố trí mặt bằng, điểm truy nhập mạng, các cổng kết nối, giao diện kết nối tại các điểm kết nối Internet quan trọng và những điều kiện kỹ thuật cần thiết cho các đơn vị chức năng thuộc Bộ Công an thực hiện nhiệm vụ bảo vệ an ninh quốc gia trong hoạt động Internet.

g. Phối hợp với cơ quan chức năng của Bộ Công an triển khai các biện pháp bảo đảm an ninh quốc gia, trật tự an toàn xã hội và phòng chống tội phạm trên mạng trước khi chính thức cung cấp dịch vụ. Thực hiện chế độ báo cáo đột xuất, định kỳ, cung cấp các thông tin cần thiết theo quy định của Bộ Công an.

h. Chịu trách nhiệm hướng dẫn đại lý Internet, điểm cung cấp dịch vụ trò chơi trực tuyến công cộng của doanh nghiệp thực hiện các quy định về bảo đảm an ninh quốc gia, trật tự an toàn xã hội và phòng chống tội phạm trên mạng của Bộ Công an trong hoạt động Internet và nội dung thông tin trên mạng.

i. Chịu sự thanh tra, kiểm tra việc chấp hành các quy định của pháp luật về bảo đảm an ninh quốc gia, trật tự an toàn xã hội và phòng chống tội phạm trên mạng của cơ quan quản lý nhà nước có thẩm quyền.

Như vậy VNG có đáng tin để chúng ta trao gửi thông tin cá nhân không? Câu trả lời của cá nhân tôi là không. Thật ra không chỉ riêng VNG mà tất cả các công ty Việt Nam đều phải thực hiện các điểm đã dẫn ở trên. Dẫu vậy tôi thất vọng khi VNG dùng lá bài “quản lý an ninh” để vận động chính quyền đưa ra chính sách có lợi cho họ.

Từ chỗ bị ép buộc, VNG bây giờ đã sỗ sàng gợi ý. Đây là một bước đi rất dài, chỉ tiếc là đi thụt lùi. Bao giờ thì ra được thế giới?

Từ đại số đến bitcoin

$
0
0

Loạt bài này tôi viết chung với anh Ngô Quang Hưng. Một phiên bản của loạt bài này, bỏ những chỗ nhố nhăng của tôi ra, sẽ được gửi đăng trên Thời Báo Kinh Tế Sài Gòn. Những đoạn đánh dấu * là những đoạn có thể bỏ qua, mà không ảnh hưởng gì đến nội dung bài. Mời mọi người đọc và còm.

Cập nhật: bài này còn nhiều chỗ sai. Tôi đang sửa, nên nếu bạn muốn sao chép sang chỗ khác thì hãy đợi bản hoàn chỉnh nhé.

Satoshi xóm Đẻ

*Một trong những trò chơi yêu thích hồi nhỏ của tôi và đám bạn ở xóm là đánh bài ăn tiền. Kỳ thực đám con nít tụi tôi đâu có tiền thật nên tụi tôi đánh bài ăn những loại tiền tượng trưng, được chọn theo mùa. Một năm có rất nhiều mùa, một mùa kéo dài vài ba tuần hay vài tháng, cho đến khi một đứa trong bọn gom hết “tiền” của mùa đó thì cả đám chuyển sang mùa khác.

*Có mùa bọn tôi đánh bài ăn dây thun. Dây thun thường phải mua bằng tiền thật, nên bọn tôi cũng có hệ thống quy đổi, một trăm đồng là bao nhiêu cộng dây thun. Nhiều đứa, trong đó có tôi, nhịn ăn nhịn uống để bỏ tiền mua dây thun về chơi. Những đứa có nhiều dây thun, chúng thắt thành sợi to, quấn quanh người, vàng đỏ đủ màu, như người ta đeo vàng, trông rất đã.

*Có mùa bọn tôi đánh tiền ăn nút khoén (nắp chai bia). Nút khoén thì không cần mua, chỉ cần bỏ thời gian đi lụm. Lụm về thì lột phần mủ cao su ra, xong đặp dẹp lại và xâu thành khoen, ăn thua nhau bằng cách đánh bài hoặc chơi thảy lổ. Có những đứa làm biếng đi lượm thì chúng bỏ tiền ra mua, “tỉ giá quy đổi” sẽ phụ thuộc hoàn toàn vào số lượng nút khoén đang có trên “thị trường” lúc đó.

*Có mùa bọn tôi đánh bài ăn trái của vẹc ni người ta trồng kín mít con đường trước xóm. Cũng có mùa bọn tôi đánh bài ăn mấy viên sỏi đủ màu lượm được ở con sông gần nhà. Nhưng vui nhất, quan trọng là giống tiền thật nhất, là khi bọn tôi đánh bài ăn vé số dò rồi. Vé số thì bọn con nít xóm tôi có đầy, do nhiều đứa đi bán vé số dạo. Gần Tết thường có loại vé số bự, đủ màu, bọc ny lon, chơi đánh bài rất đã, y như trong phim xã hội đen Hồng Kông.

*Có mấy đứa con nhà giàu, không phải đi bán vé số và cũng làm biếng đi lượm, nên chúng nó lại bỏ tiền thật ra mua tiền giả. Tôi nhớ có lúc tỉ giá là một ăn mười, nghĩa là một trăm đồng tiền thật thì đổi được một tờ vé số giá một ngàn đồng. Có thằng nhà giàu bỏ ra vài chục ngàn đồng để thu mua gần hết vé số, vì nó muốn trở thành ông trùm. Nhưng mà sáng hôm sau cả xóm quyết định hết mùa vé số, bắt đầu mùa mới là đánh bài ăn hột mít hoặc hột sầu riêng. Một hột sầu riêng bằng ba hột mít, vì chúng bự và hiếm hơn. Thế là lại đi lượm, đứa nào không lượm thì lại lấy tiền thật mua. Có đứa còn bắt má nó mua mít về ăn mỗi ngày để nó lấy hột.

*Có một sự tương quan nhất định giữa tiền thật mà chúng ta đang sử dụng với tiền giả của đám con nít xóm tôi, nhưng thôi tôi để dành sự phân tích đó cho các chuyên gia tiền tệ ngân hàng. Ở đây tôi muốn nói đến một ý tưởng rất thú vị. Cái thằng đầu tiên nghĩ ra cái hệ thống tiền theo mùa này thật khôn – nó không có tiền, nhưng nó đã nghĩ ra một cách rất hay để có tiền: tự tạo ra tiền. Mười mấy năm sau, khi mà hệ thống tiền theo mùa chỉ còn là câu chuyện trên bàn nhậu, thì một (nhóm) chuyên gia máy tính bí ẩn đã lập lại ý tưởng độc đáo này và tự tạo ra một loại tiền mới.

Tôi đang phát triển một hệ thống tiền điện tử mới…“, một người (hay một nhóm người? Chẳng ai biết cả!) tự gọi mình là Satoshi Nakamoto, đàn-ông-người-Nhật-lập-trình-viên-37-tuổi, đã thông báo như thế trên Internet vào một ngày đầu tháng mười một năm 2008. Những gì diễn ra sau đó, như người ta thường nói, đã trở thành lịch sử.

Chỉ trong vòng năm năm, từ chỗ không đáng giá một xu và cũng chẳng có mấy ai để ý đến bitcoin (đọc là bít-côn) đã và đang tạo nên một con sốt, thu hút sự chú ý của phố Wall, giới đầu tư và đầu cơ, lẫn giới khoa học công nghệ trên toàn thế giới. Tại thời điểm tôi viết bài này, mỗi bitcoin được định giá gần 900 đô la Mỹ và có những thời điểm được giao dịch tương đương với giá vàng thế giới.

Mặc dù giá trị thương mại và kinh tế của bitcoin còn bị nghi ngờ nhưng bitcoin được nhìn nhận là hội tụ một cách rất sáng tạo của nhiều ý tưởng độc đáo trong lý thuyết lẫn ứng dụng khoa học máy tính và mật mã học. Trong những phần sắp tới chúng ta sẽ cùng tìm hiểu những phát minh chính dẫn đến bitcoin.

Tiền trò chơi điện tử

Như Satoshi Nakamoto nói bitcoin là một loại tiền điện tử, vậy tiền điện tử là gì? Câu trả lời là: tùy thuộc vào hỏi ai. Nếu hỏi ông ngân hàng thì ổng sẽ nói tiền điện tử là mấy dịch vụ ngân hàng điện tử của ổng, giúp khách hàng không cần phải rút tiền mà vẫn mua hàng được. Mấy ông thẻ tín dụng như Visa hay MasterCard cũng sẽ nói thẻ của họ là một loại tiền điện tử, giúp phát triển thương mại trên Internet. Mấy ông VTC làm trò chơi trực tuyến ở Việt Nam sẽ kêu lên vcoin của họ cũng là tiền điện tử. Nhưng nếu hỏi một ông giáo sư khoa học máy tính, ổng sẽ dừng lại, mắt sáng lên rồi nói: tiền điện tử nó sâu sắc hơn nhiều!

Tiền điện tử được phát minh bởi David Chaum vào đầu những năm 80 của thế kỷ trước. Chaum cho rằng tiền điện tử phải đảm bảo được tính ẩn danh như tiền mặt (tiền giấy). Nói nôm na thì ẩn danh nghĩa là không ai có thể biết được bạn dùng tiền của bạn mua cái gì. Nếu bạn để ý trong những phim nước ngoài những người đang trốn chạy không xài thẻ tín dụng mà chỉ xài tiền mặt, chính là vì họ muốn ẩn danh, không muốn bị truy vết thông qua các giao dịch trên thẻ.

Khi bạn ra ngân hàng rút tiền mặt, rồi dùng tiền đó mua hàng hóa hoặc dịch vụ, thì rất khó để một người nhìn vào tài khoản ngân hàng của bạn mà biết được bạn đã mua gì, ở đâu và khi nào. Ngược lại nếu bạn dùng thẻ tín dụng hoặc giao dịch qua ngân hàng thì tất cả những thông tin mua bán của bạn đều sẽ được lưu lại tại ngân hàng và nếu muốn người ta hoàn toàn có thể moi được những thông tin cực kỳ riêng tư từ những giao dịch của bạn. Ví dụ như cách đây không lâu hãng Target công bố họ có thể biết được khách hàng nữ nào của họ đang có thai, đôi khi trước cả chính người khách hàng đó, bằng cách nhìn vào các món hàng mà họ mua!

Có thể đối với nhiều người thì việc lộ những thông tin này có ích hơn là có hại (vì sẽ giúp họ được phục vụ tốt hơn), nhưng từ cách đây hơn ba mươi năm Chaum đã chỉ ra rằng lộ thông tin cá nhân qua các giao dịch tài chính là lỗi chứ không phải tính năng (It’s a bug, not a feature!) của các loại tiền điện tử đương thời. Trong một thế giới mà rất nhiều chính phủ đang ngày đêm tăng cường theo dõi, giám sát và vi phạm quyền tiêng tư của các công dân, tôi không khỏi thán phục tầm nhìn xa của Chaum.

Mô hình tiền điện tử của Chaum có ba đối tượng chính: khách hàng An, người bán hàng Bình và nhà băng. An để tiền trong nhà băng và cần chuyển một số tiền cho Bình. Hệ thống của Chaum giúp cho An chuyển tiền cho Bình một cách an toàn, nhưng nhà băng vẫn không biết An và Bình có giao dịch với nhau. Ngân hàng biết rằng có một khách hàng của họ giao dịch với Bình, nhưng không thể biết chính xác người đó là ai. Đương nhiên ngân hàng có thể đoán mò, nên ý của tôi ở đây là ngân hàng không thể làm tốt hơn đoán mò.

Khi An mua một món đồ mới của Bình, nếu muốn An có thể che dấu tung tích của mình khiến cho Bình lẫn nhà băng không thể biết An chính là người đã mua hàng lần trước. Ngược lại Bình có thể hoàn toàn an tâm là đã nhận được tiền từ An. Nếu và chỉ nếu An gian lận thì danh tính của An sẽ bị bại lộ và ngân hàng có thể phong tỏa tài khoản của An hoặc nhờ sự can thiệp của pháp luật.

Rõ ràng nếu như An xài tiền mặt thì danh tính của An hoàn toàn đảm bảo. An rút tiền từ ngân hàng, rồi đưa tiền cho Bình, Bình gửi tiền vào lại nhà băng, nên trừ khi trường hợp nhà băng giám sát số serie tiền, nếu không họ không có cách nào biết rằng An giao dịch với Bình. Số serie là một cách đánh dấu tiền. Nếu như nhà băng không có cách nào đánh dấu tiền mà An rút ra thì họ không thể biết được An xài tiền đó như thế nào cả. Chaum tìm được một cách giúp An có thể rút được tiền không bị đánh dấu.

Để hiểu mô hình của Chaum, chúng ta có thể bắt đầu bằng một mô hình tương tự. Giả sử như nhà băng có một con dấu. Bất kỳ tờ giấy nào được đóng bởi con dấu này đều có giá trị một đồng. Nhà băng có thể có các con dấu khác cho các mệnh giá lớn hơn. Khi muốn rút tiền, An chuẩn bị sẵn một xấp giấy, đem đến cho nhà băng đóng dấu. Nhà băng trừ tiền từ tài khoản của An, rồi đóng dấu xấp giấy. Khi An chuyển cho Bình xấp giấy này, Bình có thể kiểm tra là chúng được đóng dấu bởi nhà băng (cứ giả sử là con dấu không thể làm giả hoặc sao chép, ta sẽ bàn chuyện này ngay sau đây). Khi Bình đem xấp giấy đến nhà băng, nhà băng có thể kiểm tra con dấu và ghi có cho tài khoản của Bình. Nhà băng vẫn có cách biết An là chủ sở hữu xấp giấy nếu họ lưu lại nội dung hoặc tìm cách bí mật đánh dấu xấp giấy của An. Nhưng An có cách để vô hiệu hóa những chiêu trò này.

Hành động đóng dấu của ngân hàng như là một chữ ký, công nhận giá trị của các tờ giấy, vốn chẳng có giá trị gì trước khi được đóng dấu. Lưu ý là ngân hàng không cần quan tâm đến nội dung những tờ giấy mà họ đóng dấu. Miễn sao cứ thấy một con dấu là họ cộng thêm cho Bình một đồng. Nói cách khác An có thể yêu cầu ngân hàng đóng dấu tờ giấy có nội dung X, xong rồi về sửa hoặc xóa đi X, nhưng vẫn giữ nguyên con dấu thì tờ giấy vẫn có giá trị một đồng, không hơn không kém. Hành động sửa nội dung của An không làm thay đổi giá trị của tờ giấy, nhưng có thể giúp An đảm bảo rằng ngân hàng không thể truy ra được danh tính của An từ những tờ tiền mà Bình gửi vào.

Chaum sử dụng một công cụ toán học được phát minh vài năm trước đó để hiện thực hóa con dấu của nhà băng.

Chữ ký của hiệp sĩ mù

Mặc dù được sử dụng rộng rãi trong các hoạt động hàng ngày, nhưng chữ ký tay (hoặc con dấu) có rất nhiều hạn chế. Ví dụ như người ta có thể làm giả chữ ký, hoặc sửa nội dung văn bản sau khi ký. Người ký vẫn có thể từ chối thừa nhận rằng họ đã ký văn bản. Chữ ký điện tử giải quyết một cách xuất sắc những vấn đề này. Được phát minh cùng lúc với sự ra đời của mật mã khóa công khai vào những năm 70 của thế kỷ trước, chữ ký điện tử đã trở thành một trong những công cụ toán học quan trọng nhất trong mật mã học cũng như an toàn thông tin.

Khi An ký văn bản D và tạo ra chữ ký điện tử S, rồi gửi DS cho Bình thì Bình có thể kiểm tra để đảm bảo (với xác suất rất cao) rằng An đã thực sự ký văn bản D và nội dung của D không bị thay đổi sau khi S được tạo ra. Nói cách khác chữ ký điện tử đảm bảo được tính toàn vẹn của văn bản được ký và giúp người nhận văn bản xác thực chính xác ai đã ký văn bản. Do không một ai khác, ngoại trừ An, có thể tạo ra chữ ký S, nên sau này An cũng không thể từ chối là đã ký văn bản D.

Nếu chúng ta thay thế con dấu của ngân hàng bằng chữ ký điện tử thì An có thể chuyển cho Bình một đồng bằng các bước như sau:

  1. An tạo ra một số ngẫu nhiên X và gửi cho ngân hàng.
  2. Ngân hàng ký X và tạo ra chữ ký Y. Ngân hàng gửi cặp số (X,Y) lại cho An. Mỗi cặp (X,Y) như thế này là một đồng tiền trị giá một đồng.
  3. An chuyển (X,Y) cho Bình. Bình có thể kiểm tra Y là chữ ký của ngân hàng trên X.
  4. Bình có thể gửi (X,Y) vào lại ngân hàng. Ngân hàng sẽ kiểm tra chữ ký của họ và ghi có một đồng vào tài khoản của Bình.

Có vài vấn đề trong mô hình này, nhưng trước tiên hãy tập trung vào tính ẩn danh mà Chaum đề xuất. Ở bước thứ tư, ngân hàng có thể dễ dàng biết rằng An đã mua hàng của Bình, do cặp số (X,Y) không thay đổi so với bước thứ hai. Chaum giải quyết vấn đề này bằng cách tạo ra một loại chữ ký điện tử mới, mà ông gọi là chữ ký mù. Chữ ký mù giúp An tạo ra một số ngẫu nhiên X, nhận lại (X,Y) từ ngân hàng, rồi từ cặp (X,Y) này tính ra một cặp (X^\prime,Y^\prime) khác, trong đó Y^\prime là chữ ký của ngân hàng trên X^\prime. Không một ai, ngoại trừ An, có thể tính (X^\prime,Y^\prime) từ (X,Y).

Rõ ràng chữ ký mù không thỏa mãn các thuộc tính của một hệ chữ ký điện tử thông thường, bởi An có thể tự tạo ra một chữ ký mới trên một văn bản mà ngân hàng chưa bao giờ ký. Đây cũng là điểm yếu rất phổ biến của các hệ chữ ký điện tử. Ở đây chúng ta thấy sự khéo léo của Chaum, khi khai thác điểm yếu này và biến nó thành một tính năng cực kỳ hữu ích. Lưu ý là ngân hàng không hề bị thiệt hại gì khi An tính ra cặp (X^\prime,Y^\prime), bởi vì đối với ngân hàng cứ một chữ ký là một đồng, họ không quan tâm nội dung được ký là gì. Chữ ký điện tử cũng đảm bảo rằng chỉ có ngân hàng mới có khả năng tạo ra chữ ký mới, do đó tiền không thể bị làm giả.

*Chữ ký mù có thể được triển khai bằng nhiều thuật toán chữ ký điện tử khác nhau, trong đó phổ biến và đơn giản nhất là RSA, thuật toán lừng danh mang tên ba nhà khoa học nghĩ ra nó. Chúng ta sẽ còn gặp lại chữ ký điện tử khi nghiên cứu kiến trúc của bitcoin, do đó tôi sẽ chỉ nói sơ qua về cơ sở toán học của RSA ở đây.

*Thuật toán RSA có nguồn gốc từ định lý Fermat nhỏ (để phân biệt với định lý Fermat lớn). Định lý này phát biểu rằng nếu p là số nguyên tố thì a^{p-1}\equiv 1 \pmod p với mọi số nguyên a thỏa gcd(a, p) = 1, trong đó gcd (x, y) là hàm tính ước chung lớn nhất của xy (nói cách khác ap nguyên tố cùng nhau). Định lý Fermat nhỏ được tổng quát hóa hai lần và tôi nghĩ đây là một trong những kết quả đẹp nhất của toán học.

*Đầu tiên Euler tổng quát hóa định lý Fermat và phát biểu rằng a^{\phi(n)}\equiv 1 \pmod n với mọi số nguyên na thỏa gcd(a, n) = 1, trong đó phi(n) là hàm totient của Euler, được định nghĩa là số các số nguyên dương nhỏ hơn hoặc bằng n và nguyên tố cùng nhau với n. Sự liên quan giữa Fermat với Euler là ở chỗ \phi(p) = p - 1 khi p là số nguyên tố.

Bài tập: chứng minh rằng nếu n = p * q, trong đó pq là hai số nguyên tố thì \phi(n) = \phi(p) * \phi(q) = (p - 1) * (q - 1).

*Nhưng kết quả đẹp nhất và tổng quát hóa nhất mà tôi biết là định lý Lagrange, một định lý này thoạt nhìn chẳng có dây mơ rễ má gì với Fermat và Euler cả, nhưng lại cho thấy một mối liên hệ rất bất ngờ giữa số học và đại số. Lagrange phát biểu rằng trong một nhóm hữu hạn G thì bậc (số phần tử) của mọi nhóm con của G đều chia hết cho bậc của G. Chúng ta sẽ quay lại lý thuyết nhóm hữu hạn trong phần nói về kiến trúc của bitcoin, tôi chỉ nói sơ qua rằng tập hợp các số trong khoảng [1, p-1] tạo thành một nhóm vòng hữu hạn với bậc là p-1 và do đó suy ra được định lý Fermat.

Quay trở lại chữ ký mù. Mặc dù chữ ký mù giúp Chaum đảm bảo được tính ẩn danh cũng như chống làm giả tiền, nhưng mô hình này có một lỗ hổng khác nghiêm trọng không kém: An có thể xài đồng tiền (X^\prime,Y^\prime) của mình nhiều lần! (X^\prime,Y^\prime) chỉ là một cặp số và không có gì có thể cản An sao chép cặp số này nhiều lần. Một cách đơn giản để giải quyết vấn đề này là ngân hàng lưu lại toàn bộ những đồng tiền đã được xài (những đồng tiền mà họ thấy ở bước 4) và mỗi khi Bình nhận được một đồng từ An, Bình sẽ hỏi ngân hàng xem đồng đó có được xài hay chưa trước khi chấp nhận giao dịch. Nghĩa là các giao dịch bây giờ không còn được xử lý offline như tiền mặt nữa, mà bắt buộc phải xử lý online, thông qua sự xác nhận của ngân hàng.

Chaum và các cộng sự giải quyết vấn đề này bằng cách “nhúng” danh tính của An vào đồng tiền. Nếu An không gian lận thì An vẫn hoàn toàn ẩn danh. Nhưng khi sử dụng lại một đồng tiền đã dùng rồi (double spending) thì ngân hàng hoàn toàn có thể truy ra danh tính của An và chứng minh rằng An đã gian lận. Từ những phát minh này Chaum thành lập công ty DigiCash vào năm 1988, với mục tiêu là biến tiền điện tử thành công cụ thanh toán cho tất cả các giao dịch điện tử.

Trong những năm đầu tiên DigiCash là một trong những công ty công nghệ thu hút sự chú ý của toàn thế giới, nhưng rồi công ty này bị phá sản và phải đóng cửa vào năm 1998. Có rất nhiều lý giải cho sự thất bại của DigiCash, nhưng có lẽ quan trọng nhất là tiền điện tử của Chaum phụ thuộc vào ngân hàng, nhưng lại không cạnh tranh được với thẻ tín dụng. Các ngân hàng thu được rất nhiều tiền từ thẻ tín dụng, nên họ cũng không muốn thay đổi làm gì. Về phía người tiêu dùng, mặc dù tiền điện tử giúp họ bảo vệ được sự riêng tư và không phải lo lắng về việc lộ số thẻ tín dụng, nhưng trong thực tế chẳng ai quan tâm đến ẩn danh (nhất là khi họ mua hàng hóa và gửi về tận nhà) và nếu như có giao dịch bất thường trên thẻ thì người tiêu dùng cũng không phải chịu trách nhiệm.

Nhìn chung thì mặc dù giải quyết được một loạt vấn đề quan trọng của tiền điện tử như tính ẩn danh, chống làm giả, chống sử dụng lại, có thể trao tay và thanh toán offline, nhưng tiền điện tử của Chaum kỳ thực chỉ là một hình thức thanh toán cho các loại tiền tệ có sẵn được quản lý bởi chính phủ và ngân hàng. Tiền của Chaum mới chỉ đáp ứng được chức năng là phương tiện trao đổi (medium of exchange), chứ không đảm bảo được chức năng lưu trữ giá trị (store of value) như các loại tiền tệ bình thường. Trong khi đó, bitcoin đảm bảo được cả hai chức năng cơ bản này. Chẳng những thế bitcoin còn loại bỏ hoàn toàn vai trò của chính phủ và ngân hàng trong tất cả các hoạt động liên quan đến loại tiền này, từ phát hành cho đến thanh toán, xác nhận giao dịch. Thực tế không một ai, không một tổ chức nào có thể kiểm soát và điều khiển bitcoin, như cách mà mỗi chính phủ kiểm soát và điều khiển đồng tiền của nước họ.

Bitcoin làm được điều này bằng cách sử dụng một công nghệ mà thời của Chaum chưa có.

(còn tiếp)


Lập trình máy kỳ dị

$
0
0

Đồng nghiệp cũ của tôi ở Matasano mới làm một cái game rất thú vị, bạn nào muốn luyện kỹ năng dịch ngược mã và khai thác lỗi bộ nhớ thì nên xem: microcorruption.com.

Lâu lắm rồi tôi mới chơi game dạng này. Hồi trước tôi hay chơi CTF, nhưng mà CTF thường đòi hỏi phải tập trung liên tục trong vài ngày. Có lần tôi chơi liên tục ba ngày hai đêm, ngủ luôn ở công ty, sáng dậy thì đi bộ ra ăn hủ tíu gõ xong về chơi tiếp. Không tắm! Bây giờ thì không làm vậy được nữa. Với lại CTF nhiều khi đòi hỏi phải có những công cụ hay setup mà tôi không có sẵn, nên dần dà tôi cũng không còn mặn mà lắm.

Micro Corruption hay ở chỗ chỉ cần browser là chơi được và muốn chơi lúc nào cũng được. Mỗi ngày tôi chơi 1-2 tiếng, khi nào chán thì thôi, không phải chạy đua thời gian nên khá là thư giãn. Điều mà tôi thích nhất là game này có nhiều màn, bắt đầu từ rất dễ, mãi về sau mới có những mức khó hơn, thành ra mình có thể vừa chơi vừa học.

Tôi thích những game mà tôi có thể học được gì đó, hơn là những game đánh đố, khó nhưng không hay.

Tôi chơi hổm rày thì thấy những màn đầu chỉ cần kiến thức cơ bản về cấu trúc máy tính và cách tổ chức bộ nhớ của một tiến trình là có thể làm được. Sau đó sẽ có những màn đòi hỏi phải biết cách khai thác lỗi hỏng bộ nhớ trên stack, trên heap, lỗi tràn số nguyên hay lỗi format string. Những màn gần cuối sẽ có thêm những trở ngại phải vượt qua như DEPASLRshellcode chỉ được chứa ký tự alphabet, v.v Nhìn chung là tất cả những hướng tấn công mà chúng ta biết đến, cách phòng chống thông thường và cách vượt qua chúng đều được đưa vào game.

Chơi game này dễ ghiền, vì nó cho ta cảm giác ta có thể kiểm soát tất cả mọi thứ. Tôi nghĩ đây cũng là điều làm cho ngành security, mà đặc biệt là lĩnh vực khai thác lỗi phần mềm, trở nên cực kỳ hấp dẫn. Bạn lấy một chương trình, chẳng cần mã nguồn, mở tung nó ra để rồi hiểu nó còn hơn cả người viết ra nó. Bạn chạy chương trình, gửi cho nó một đoạn dữ liệu và ngay lập tức kiểm soát được lệnh tiếp theo mà chương trình sẽ chạy. Nhưng mọi chuyện chưa dừng ở đây, mà cuộc vui thật sự chỉ mới bắt đầu.

Bạn cần phải lập trình lại chương trình ban đầu. Ví dụ như khi dùng Mobile Safari trên một số phiên bản iPhone để truy cập vào www.jailbreakme.com thì Safari không còn là trình duyệt nữa, mà trở thành công cụ jailbreak tự động. Bản thân Safari không thể làm việc này, nhưng nó đã được comex lập trình lại. Vào năm 2010 Safari cũng đã từng được lập trình lại để tải hết tin nhắn SMS lên một máy chủ. Chrome cũng không thoát khỏi số phận bị lập trình lại, mặc cho các kỹ sư Google đã dày công bày binh bố trận bảo vệ.

Rõ ràng lập trình lại một chương trình đang chạy không phải là chuyện đơn giản. Bạn cần phải biết (một phần) trạng thái của chương trình: giá trị của các register, trên stack và heap đang có những gì, các biến toàn cục và cục bộ đang có giá trị gì, v.v. rồi bắt chương trình chạy lệnh theo ý mình và chuyển qua một trạng thái tiếp theo. Nhưng nhập lệnh gì và như thế nào?

Một ví dụ cơ bản: bạn muốn gọi một hàm và truyền vào cho nó một chuỗi (ví dụ như gọi hàm system, truyền vào con trỏ đến chuỗi /bin/sh để lấy shell), nhưng tại thời điểm bạn kiểm soát được chương trình thì stack trông như thế này:

Bạn kiểm soát được nội dung những ô màu xanh, nhưng không kiểm soát được ô màu trắng. Nói cách khác bạn cần phải chạy được những lệnh để chuyển con trỏ stack (esp) về vùng nhớ mà bạn kiểm soát được. Có nhiều cách để làm được việc này – một cách đơn giản là trỏ eip (con trỏ chứa địa chỉ dòng lệnh tiếp theo của chương trình) vào một đoạn chương trình có nội dung là

pop
pop
pop
ret

Mỗi lệnh pop sẽ chuyển esp lên một ô, ba lệnh pop sẽ chuyển esp lên ô màu xanh đầu tiên, lệnh ret sẽ lấy giá trị của ô này gán cho eip. Nhưng đoạn “pop, pop, pop, ret” ở đâu ra? Bạn có thể nhập vào, hoặc hay hơn là sử dụng lại chính mã của chương trình mà bạn đang muốn kiểm soát. Kỹ thuật này đã được sử dụng từ rất lâu và gần đây được gọi là return-oriented programming. Ở Việt Nam có mấy anh ở VNSECURITY là chuyên gia trong lĩnh vực này.

Tựu trung lại thì cái máy mà bạn cần phải lập trình rất dị thường: trạng thái đầu vào, dữ liệu có thể nhập vô, định dạng của chúng, trạng thái đầu ra, tập lệnh có thể chạy được, v.v. tất cả những thông tin mà bình thường bạn sẽ biết có thể sẽ rất mù mờ và chính bạn phải lần mò tìm ra chúng bằng cách dịch ngược mã chương trình. Có khi một phần chương trình mục tiêu cũng bị che đi và bạn phải dùng một lỗi ở phần chương trình đã biết để tải về mã của phần chương trình chưa biết. Trong mớ bòng bong này, bạn phải khiến chương trình làm được một việc gì đó hữu ích cho bạn! Chào mừng đến với nghệ thuật lập trình máy kỳ dị.

Tôi nghĩ dùng Micro Corruption làm giáo trình dạy kiến trúc máy tính thì hay tuyệt. Nếu mấy anh ở Matasano đồng ý, tôi sẽ thu xếp dùng cái này để mở một lớp trực tuyến miễn phí về kiến trúc máy tính và khai thác lỗi phần mềm. Sách để đọc là cuốn Computer Systems: A Programmer’s Perspective mà tôi đã có giới thiệu trước đây. Tôi sẽ thông báo khi nào chuẩn bị xong.

Tôi đi biểu tình ở Mỹ

$
0
0

Tôi đi biểu tình lần đầu là khi biểu tình tự phát chống chính quyền Trung Quốc nổ ra ở Sài Gòn vào năm 2007. Lần đó chẳng làm được gì, không biểu ngữ, không cờ phướn vì thiếu chuẩn bị, ra đến nơi cũng không hò hét được gì, vì cứ bị cảnh sát với dân phòng lùa hết chỗ này sang chỗ khác. Lần thứ hai tôi đi biểu tình, cũng lại là chống chính quyền Trung Quốc, là ngày hôm qua. Bọn tôi biểu tình trước lãnh sự quán Trung Quốc ở San Francisco (SF), rồi diễu hành gần hai cây số đến Union Square, quãng trường trung tâm thành phố.

Theo thông tin trên mạng thì muốn biểu tình phải xin giấy phép và nơi xin là sở cảnh sát San Francisco (SFPD), nên tôi gọi điện lên hỏi. Người ta hướng dẫn là chỉ cần lên điền một cái đơn theo mẫu là được. Hình như có thể nộp qua mạng, nhưng do làm lần đầu nên tôi muốn nộp đơn trực tiếp, để có thắc mắc gì thì hỏi luôn. Tôi cũng hơi lo lắng, không biết có nhận được giấy phép trước thời gian dự kiến của cuộc biểu tình hay không.

Hóa ra đúng là chỉ cần điền một cái đơn theo mẫu là được. Không tốn tiền gì và chỉ mất chưa đến 10′, chưa kể thời gian chạy từ nhà lên SFPD. Người ta hẹn hôm sau sẽ có một sĩ quan cảnh sát gọi điện thoại lại để xác nhận là được cấp phép hay không. Viên sĩ quan gọi cho tôi giọng rất vui vẻ, dặn dò rằng chỉ cần không tràn xuống lề đường là được, họ sẽ cử cảnh sát ra để đảm bảo an ninh trật tự và giúp đỡ đoàn khi diễu hành. Ông cảnh sát còn nói với tôi là “Chỗ lãnh sự quán Trung Quốc này có biểu tình hoài hà” :-).

Đến ngày đến giờ, mấy ông cảnh sát có mặt đúng hẹn, rồi theo chân đoàn biểu tình cho đến khi chúng tôi rã đám. Khi đoàn đi diễu hành, họ chạy xe theo để đảm bảo chúng tôi qua ngã tư an toàn và không làm ách tắc giao thông. Khi bọn tôi hỏi có thể dùng loa để hô khẩu hiệu không, mấy ổng kêu “Vô tư đi, mấy anh dùng cái gì để nói cũng được, đừng lo”. Lúc đó tôi hiểu rằng trách nhiệm của người cảnh sát là đảm bảo cho người dân chúng tôi được thực thi quyền tự do ngôn luận được ghi trong hiến pháp Mỹ. Họ cứ thế mà làm, chẳng phải băn khoăn có ai “lợi dụng các quyền tự do dân chủ” hay không.

Đối ngoại thì nhẹ nhàng, còn đối nội thì có phần nhiêu khê hơn.

Bọn tôi thông báo kế hoạch biểu tình cho cộng đồng cựu du học sinh, những người đang làm việc ở đây như tôi, và cả những bạn sinh viên học sinh đang học ở các trường đại học trong vùng và yêu cầu ai đi được thì đăng ký trên một cái spreadsheet. Tôi để chế độ “Ai cũng được phép sửa” và vài tiếng đồng hồ sau thì có ai đó vào xóa hết thông tin trong cái spreadsheet và phán rằng chúng tôi là “bọn phản động”. Tôi không biết ai là người làm việc này, nhưng tôi cũng muốn cảm ơn, vì đây là lần đầu tiên trong đời tôi được gọi là phản động. Tôi chưa bao giờ yêu nước đến mức được xem là phản động cả. Thật vinh dự.

Một vấn đề nổi cộm của cuộc biểu tình là màu cờ. Hai câu hỏi mà tôi nhận được nhiều nhất là: có được đem cờ đỏ sao vàng không? Liệu có ai đem cờ vàng ba sọc không? Tôi chủ trương đây là cuộc biểu tình mở, bất kỳ ai cũng có thể tham gia. Tôi nghĩ mang cờ gì là chuyện của mỗi cá nhân, chứ cả thảy buổi biểu tình không đại diện mà cũng không loại bỏ bất kỳ màu cờ gì. Buổi biểu tình chỉ đại diện cho người Việt Nam. Miễn sao là người Việt Nam hoặc có quan tâm đến tình hình Việt Nam là được chào đón. Ví dụ như ai là công dân CHXHCNVN thì sẽ đem cờ đỏ sao vàng, ai là công dân của VNCH thì có thể đem cờ vàng ba sọc. Tất cả đều được chào đón. Chúng ta là đồng bào.

Thú thật thì ở đây tìm cờ đỏ sao vàng rất khó, nên bọn tôi cũng nghĩ nếu buổi biểu tình không có cờ đỏ sao vàng mà chỉ có cờ vàng ba sọc thì kể ra cũng kỳ, vì phần lớn chúng tôi sinh ra đã là công dân CHXHCNVN, dẫu có thể không thích chính quyền hiện tại nhưng màu cờ đỏ sao vàng vẫn quen thuộc và thiêng liêng nhất. Có vài đề nghị (từ những người không đi biểu tình :-P) là chúng tôi nên liên hệ với lãnh sự quán Việt Nam ở San Francisco để mượn cờ và áo. Người của lãnh sự quán cũng có liên hệ với tôi, nhờ tôi mời một số kiều bào đang sống trong vùng đến biểu tình, vì họ e rằng họ mời người ta không đi.

Tôi không muốn mời ai cả, vì tôi cho rằng biểu tình cho đất mẹ vừa là trách nhiệm, vừa quyền lợi của người tha hương như chúng tôi. Mỗi người nên tự nguyện tham gia. Tôi và người bạn đứng ra tổ chức cũng chuẩn bị sẵn tinh thần là vẫn biểu tình nếu chỉ có vài người tham gia. Tôi cũng không liên hệ với lãnh sự quán, vì không muốn có sự hiểu lầm rằng cuộc biểu tình này là do chính phủ Việt Nam tổ chức. Rất may là vào phút chót hội du học sinh Việt Nam ở Bắc California tham gia và họ có đầy đủ áo cờ rất đẹp. Như thấy trong hình, rốt cuộc chỉ có cờ đỏ sao vàng. Tôi nghe nói là người cờ vàng ba sọc đã biểu tình một tuần trước đó.

Có người hỏi tôi là tại sao lại tổ chức biểu tình, lãnh sự quán Trung Quốc đóng cửa vào chiều thứ bảy, mục tiêu của đoàn biểu tình là gì?

Tôi nghĩ nếu không xem được trực tiếp thì họ có thể xem trên lại buổi biểu tình trên… Facebook :-). Thời đại truyền thông xã hội mà. Quan trọng là mình có thông điệp rõ ràng, mạnh mẽ, còn lại thì để truyền thông làm nhiệm vụ phát tán.

Tôi không biết chắc lý do những người khác biểu tình, nhưng với cá nhân tôi thì biểu tình trước hết là cho bản thân mình. Tôi xin mượn lời của anh Trình Quốc Tuấn viết cho con gái chưa tròn hai tuổi:

“Hôm nay có người đã hỏi ba: đi làm gì, giải quyết được gì?

Ba đã trả lời: tại sao lại hỏi đi làm gì, giải quyết được gì? Đơn giản là xuống đường để chia sẻ tình cảm của mình với tổ quốc, để được đi cùng những người mà trong cuộc sống chưa một lần gặp, nay đứng bên nhau nhìn về một hướng. Để thấy mình không cô đơn, để giải toả sự phẫn uất của một công dân khi chủ quyền bị chà đạp. Thứ tình cảm đó nó thiêng liêng từ trong máu mủ và ko vụ lợi thì tại sao phải hỏi quá nhiều phải không con!”

Tôi đi biểu tình còn là vì đây là quyền tự do của tôi. Tôi đang sống ở một xứ sở tự do, nếu tôi có quyền nói mà tôi không dám nói thì không khác chi là tôi tự tước đi tự do của tôi. Tôi không thể làm như thế được. Có vài người nói với tôi là họ cũng muốn đi, nhưng sợ bị chụp hình chung với cờ vàng ba sọc, sợ bị đánh dấu là có hoạt động chính trị, v.v. nên thôi. Tôi hiểu nỗi sợ của họ, nhưng chính vì thế mà tôi càng muốn đi, để cho người ta thấy là sợ hãi và tự kiểm duyệt không phải là việc làm của một con người tự do.

Vả lại nếu chúng tôi không đi, thì ai sẽ đi? Nếu ai cũng sợ thì ai sẽ làm gì đó?

Đánh nhau bằng toán

$
0
0

Tuần vừa xảy ra một sự kiện cực kỳ lý thú: Juniper công bố các thiết bị VPN của họ đã bị cài backdoor (tức là ai đó cố tình tạo ra một lổ hổng để họ có thể bí mật kiểm soát các thiết bị này) từ năm 2012.

Sự kiện này là một trường hợp cho thấy tin tưởng mù quáng vào các thiết bị an ninh, nhất là các thiết bị mã nguồn đóng, thường là sai lầm lớn nhất khi làm quản lý an toàn thông tin. Cách đây nhiều năm khi viết về tường lửa (firewall) tôi có nói thế này:

<quote>

Firewall, về bản chất, cũng chỉ là một software chạy trên một hardware, mà đã là software, do con người tạo ra, thì thể nào cũng sẽ có lỗi. Kinh nghiệm của tôi cho thấy, nơi nào mà có software chạy, từ máy ATM cho đến các vệ tinh, nơi đó sẽ có bug, và có thể trong số các bug này, sẽ có những bug gây nguy hại đến sự an toàn của hệ thống.

Đương nhiên, các software, cụ thể là các hệ điều hành, chạy trên firewall thường rất nhỏ gọn, thường đã được kiện toàn trước khi xuất xưởng, và không phổ biến như Windows, Linux hay Mac, thành ra kiến thức về cách thức chúng hoạt động cũng như các kỹ thuật tìm kiếm và khai thác lỗ hổng bảo mật cũng không phổ biến đại trà.

Nhưng tất cả chỉ là vấn đề thời gian (và tiền bạc) mà thôi. Chẳng hạn như đối với Cisco IOS, từ năm 2005, Michale Lynn đã công bố các phương thức khai thác lỗi của nó (trước đó có FX từ năm 2003 đã có những research hoàn chỉnh về Cisco IOS). Kể từ đó đến nay, đã có rất nhiều research của các hãng và cá nhân tên tuổi trên thế giới về các lỗ hổng bảo mật trên hệ điều hành này của Cisco. Thậm chí gần đây, người ta còn phát triển được cả rootkit trên IOS.

</quote>

VPN là giải pháp truy cập từ xa vào hệ thống mạng nội bộ. Thông qua VPN một nhân viên ngồi ở nhà, hoặc quán cafe, có thể truy cập vào hệ thống mạng nội bộ của công ty như bình thường. Thiết bị VPN là dạng thiết bị trọng yếu bật nhất trong hệ thống thông tin của một công ty. Tài khoản truy cập VPN thường gắn liền với tài khoản email, ngoài ra với vị trí cầu nối giữa Internet và hệ thống nội bộ, thiết bị VPN thấy toàn bộ những dữ liệu nhạy cảm (bao gồm mật khẩu, văn bản, hình ảnh, v.v.) mà nhân viên công ty tải về máy tính cá nhân của họ. Ai kiểm soát được các thiết bị này thì coi như kiểm soát được tất cả thông tin mật của công ty.

Sau khi reverse engineering firmware của Juniper, người ta phát hiện ra hai backdoor: một backdoor cho phép truy cập từ xa mà không cần biết mật khẩu (chi tiết) và một backdoor cho phép những ai quan sát được dữ liệu (đã mã hóa) đi xuyên qua các thiết bị VPN có thể dễ dàng giải mã chúng. Với backdoor đầu, coi như ai cũng có thể điều khiển các thiết bị VPN của Juniper, rất nguy hiểm nhưng về mặt kỹ thuật cũng không có gì đặc sắc, nhưng backdoor thứ hai thì cực kỳ thú vị.

Mật mã học hiện đại phụ thuộc rất lớn vào các bộ tạo số ngẫu nhiên. Mỗi lần bạn truy cập vào Facebook, máy tính của bạn và máy chủ Facebook liên tục tạo ra các số ngẫu nhiên và sử dụng chúng để mã hóa dữ liệu truyền giữa hai phía. Cũng tương tự như vậy, khi một nhân viên truy cập vào hệ thống VPN, máy tính của họ và thiết bị VPN cũng liên tục tạo ra các số ngẫu nhiên để mã hóa dữ liệu truyền qua lại.

Ai đã từng lập trình sẽ hiểu tạo số ngẫu nhiên trên máy tính không đơn giản chút nào. Các hệ điều hành và các thư viện phần mềm thường cung cấp sẵn các hàm tạo số ngẫu nhiên, nhưng bạn có bao giờ thắc mắc các hàm này được lập trình ra sao chưa? Nói cách khác, bây giờ nếu không gọi các hàm có sẵn, bạn sẽ làm gì để tạo ra một số ngẫu nhiên trong chương trình của bạn? Bạn sẽ nhận ra rằng bất kể thuật toán của bạn là gì, nó sẽ là tất định, đầu vào hoàn toàn quyết định đầu ra, không có cách chi để bạn lập trình máy tính trả về một số ngẫu nhiên cả. Nếu đơn giản, Knuth đã không dành hẳn một chương trong bộ The Art of Computer Programming để bàn về các thuật toán tạo số ngẫu nhiên.

Các bộ tạo số ngẫu nhiên là những thuật toán tất định (deterministic algorithm) sử dụng một trong hai mẹo để tạo ra sự ngẫu nhiên:

* ghi nhớ số ngẫu nhiên đã tạo trước đó và các số tạo tiếp theo sẽ phụ thuộc vào số tạo trước nó. Tôi sẽ không bàn về kỹ thuật này ở đây, ai hứng thú có thể xem thêm bộ tạo số ngẫu nhiên đồng dư tuyến tính.

* sử dụng các phần cứng đặc biệt để tạo ra số ngẫu nhiên đầu tiên (thường được gọi là seed, hạt giống), các số ngẫu nhiên tiếp theo sẽ phụ thuộc vào hạt giống ban đầu. Đây là kỹ thuật của các bộ tạo số ngẫu nhiên dùng trong mật mã và cũng được sử dụng bởi các thiết bị VPN của Juniper.

Các CPU hiện đại thường có sẵn một mô-đun để tạo số ngẫu nhiên, dựa vào các sự kiện ngẫu nhiên mà CPU quan sát được, ví dụ như số lần instruction mov eax, eax được thực thi trong 1s vừa rồi, hay các hiện tượng vật lý (xem thêm bộ tạo số ngẫu nhiên thực). Các số ngẫu nhiên được tạo ra ở trong CPU hoàn toàn không thể dự đoán được, nhưng các bộ tạo số này thường rất chậm, do phải phụ thuộc vào môi trường, thường không đáp ứng được nhu cầu của hệ điều hành và các phần mềm chạy ở trên hệ điều hành (ví dụ như trình duyệt, v.v). Do đó người ta chỉ dùng các số ngẫu nhiên do CPU tạo ra để làm hạt giống cho các bộ tạo số ngẫu nhiên bằng phần mềm. Ví dụ như trên Linux, có bộ /dev/urandom

$ cat /dev/urandom

Từ đây về sau tôi dùng từ bộ tạo số ngẫu nhiên để chỉ các bộ tạo số ngẫu nhiên bằng phần mềm, tương tự như /dev/urandom.

Tiêu chuẩn quan trọng nhất của các bộ tạo số ngẫu nhiên là không thể dự đoán. Nếu chỉ cần quan sát một vài số đã được tạo ra mà có thể dự đoán được những số sẽ được tạo ra tiếp theo (hoặc là trước đó), bộ tạo số coi như không đủ tiêu chuẩn để dùng trong mật mã. Có nhiều thuật toán ngẫu nhiên, nhưng Juniper chọn thuật toán có tên là Dual EC. Trên danh nghĩa đây là thuật toán được thiết kế và chuẩn hóa bởi Viện Tiêu Chuẩn Công Nghệ Mỹ (NIST), nhưng các tài liệu của Edward Snowden chỉ ra rằng thuật toán này được thiết kế bởi Cục An Ninh Quốc Gia Mỹ (NSA). Vấn đề là NSA đã cài một backdoor vào thuật toán này, giúp họ có thể dự đoán được những số sẽ được tạo ra chỉ bằng cách quan sát một số trước đó.

Mặc dù Dual EC có thể đọc thành DỞ ẸC, nhưng chữ EC thật ra có nghĩa là elliptic curve. Dual EC sử dụng nhóm các điểm trên đường cong elliptic curve để tạo số ngẫu nhiên. Thuật toán này có hai bước đơn giản

* Từ một số ngẫu nhiên r, tạo ra số ngẫu nhiên kế tiếp bằng cách tính r * Q, tức cộng dồn điểm Q r lần.

* Thay thế r bằng r * P.

Lưu ý nếu biết r thì có thể dự đoán được tất cả các số sẽ được tạo ra tiếp theo.

Mô tả của tôi về thuật toán Dual EC không chính xác 100%, nhưng đủ chính xác để giới thiệu backdoor. PQ là hai điểm cho trước trên đường cong. NSA chọn P là một hằng số không có gì đáng nghi ngờ, nhưng không giải thích nguồn gốc của Q. Hai nhà nghiên cứu của Microsoft chỉ ra từ 2007 rằng nếu Q không được chọn ngẫu nhiên, NSA có thể dự đoán được tất cả các số sẽ được tạo ra tiếp theo, chỉ bằng cách quan sát một số đã được tạo ra trước đó. Vì PQ được định nghĩa trên đường cong có tên là P-256, nên tồn tại một số $e$, sao cho e * Q = P. Nếu biết được er * Q NSA có thể tính r * Q * e = r * P, tức là đã tính được r và từ đó có thể dự đoán được tất cả những số ngẫu nhiên sẽ được tạo ra. Vì NSA chọn PQ nên chắc chắn họ biết e.

Nếu bài toán logarithm rời rạc trên nhóm các điểm trên đường cong elliptic là khó, ngoài NSA ra không ai có thể sử dụng backdoor này. Đây là dạng backdoor NOBUS (No One But Us) được chính phủ Mỹ và các nước ưa thích. Vấn đề của NSA là làm sao thuyết phục được các công ty sử dụng Dual EC. Thuật toán này chạy rất chậm và ngoài backdoor này ra, nó còn có vài vấn đề an ninh khác. Do đó khi Edward Snowden xác nhận Dual EC đích thực bị NSA cài backdoor, lúc đầu người ta nghĩ chắc không ai sử dụng nó đâu.

Rốt cuộc người ta phát hiện có ít nhất 4 công ty Mỹ có đính kèm Dual EC vào các sản phẩm của họ: Microsoft, Cisco, RSA và bây giờ là Juniper. Tôi không rõ Cisco sử dụng Dual EC như thế nào, nhưng Microsoft không sử dụng chúng như là bộ tạo số mặc định (người dùng phải chỉnh một cờ trong registry để kích hoạt bộ tạo số này). RSA là một trường hợp rất thú vị. RSA bán một bộ thư viện mật mã mang tên là BSAFE và BSAFE sử dụng Dual EC là bộ tạo số mặc định. Nói cách khác, ai sử dụng sản phẩm của RSA coi như đã bị chính phủ Mỹ nắm đầu. Người ta còn phát hiện ra một hợp đồng bí mật trị giá 10 triệu USD mà NSA trả cho RSA để cài Dual EC vào BSAFE. Tóm lại chỉ có khùng (hoặc giả khùng ngậm tiền) mới tiếp tục sử dụng sản phẩm của RSA.

Cái cách mà Juniper sử dụng Dual EC cũng rất lý thú. Họ dùng nó một cách gián tiếp. Họ tạo ra một số ngẫu nhiên từ Dual EC, rồi sử dụng số đó để làm hạt giống cho một bộ tạo số khác, nhanh hơn, an toàn hơn và không có backdoor. Tại sao? Chẳng ai biết! Không có lý do gì để Juniper làm như vậy cả, ngoại trừ khi họ bị ép buộc phải sử dụng Dual EC (hoặc, như RSA, có hợp đồng bí mật với NSA). Đặc biệt nhất, Juniper không sử dụng Q do NSA chỉ định, mà lại tự định nghĩa một hằng số  Q' khác. Vấn đề là Juniper không thể chỉ ra Q' đã được tạo ra như thế nào. Không ai có bằng chứng chuyện gì đã diễn ra, nhưng chỉ có hai giả thuyết:

* Juniper tự tạo Q' cho riêng mình để loại trừ backdoor của NSA.

* NSA tạo Q' và yêu cầu Juniper sử dụng Q'.

Nhắc lại, chẳng có lý do chính đáng để sử dụng Dual EC, nên nếu Juniper muốn xóa backdoor, cách đơn giản hơn là không sử dụng Dual EC. Thành ra giả thuyết thứ hai có vẻ mạnh hơn. Có thể NSA không muốn gom tất cả trứng để vào một rổ, hoặc họ muốn chia sẻ backdoor trên thiết bị VPN của Juniper của họ với đối tác mà không muốn tiết lộ cách tạo Q, vì thông tin đó có liên quan đến backdoor ở nhiều thiết bị khác nữa, không riêng gì VPN.

Không ai biết Juniper bắt đầu sử dụng Dual EC từ khi nào, nhưng năm 2012 xảy ra một sự kiện quan trọng. Một nhân viên nào đó của Juniper hoặc một ai đó xâm nhập vào hệ thống của họ đã bí mật đổi Q' thành Q''. Juniper mới (?) phát hiện ra chuyện này cách đây vài tuần và thông báo của họ đã khơi nguồn cho bài blog này.

Ai đã đổi Q' thành Q''? Có phải Juniper mới phát hiện ra không, hay là họ đã biết từ lâu nhưng không nói gì? Tại sao lại chọn công bố ngay giữa lúc ở Mỹ đang có cuộc tranh luận lớn về chuyện chính phủ Mỹ có được quyền gài backdoor vào các tiêu chuẩn mật mã hay không?

Không có ai có đủ thông tin để trả lời những câu hỏi này. Tôi nghĩ chính NSA đã đổi Q' thành Q''. Nếu NSA kiểm soát Q' như đã bàn ở trên và vào năm 2012 một ai đó (Trung Quốc chẳng hạn) đổi Q' thành Q'', tức là backdoor của NSA đã bị vô hiệu hóa trong suốt 5 năm qua mà họ không hay biết gì sao? Tôi nghĩ khó có khả năng đó. Ngược lại, nếu NSA đổi Q' thành Q'' thì backdoor của họ vẫn còn hiệu lực trong suốt thời gian qua.

Khi phát hiện ra có người đổi Q' sang Q'', Juniper sửa lại bằng cách đổi trở lại Q'. Có thể họ có hợp đồng với NSA? Chẳng ai biết tại sao họ không bỏ Dual EC đi quách cho rồi! Hơn nữa, để khai thác được backdoor này, kẻ tấn công phải quan sát được r * Q, nhưng điều đó là không thể nếu như Juniper chỉ sử dụng Dual EC để tạo hạt giống cho một bộ tạo số khác (như đã nói ở trên). Vấn đề là trong mã nguồn của Juniper còn có một lổ hổng khác (một backdoor thứ ba, không biết được cài từ hồi nào) tiết lộ giá trị của r * Q. Juniper không hề đả động gì đến lổ hổng này trong các thông báo sửa lỗi của họ. Tại sao? Không ai biết cả.

Một vị quan chức ngành an toàn thông tin có lần hỏi tôi có nên tin tưởng các thiết bị của nước ngoài hay không. Tôi có nói xét ở bình diện an ninh quốc gia thì chẳng thể tin tưởng ai cả. Chỉ có cách duy nhất là tuyển dụng đào tạo đội ngũ kỹ sư lành nghề để họ xây dựng giải pháp dựa trên các nền tảng mở sẵn có.

Đối với doanh nghiệp thì thú thật tôi cũng không có giải pháp nào khác ngoại trừ việc thuê mướn đào tạo tuyển dụng chuyên gia. Doanh nghiệp nhỏ thì hi vọng là chẳng ai để ý đến mình, còn doanh nghiệp lớn, có làm ăn mua bán với nước ngoài thì chỉ có cách đầu tư mạnh để thu hút chất xám công nghệ mà thôi.

Nếu bạn thích những chủ đề như vầy, bạn nên mua vé tham dự TetCon 2016.

Viewing all 11 articles
Browse latest View live