|
|
dazzlingvit wrote:
Theo như anh conmale thì server sẽ tạo token và gửi trả lại client dưới dạng Hidden fields. Nhưng liệu token này có thể bị đọc bởi một trang thứ 3 như sau không?
(Giả sử người dùng bị lừa vào một trang nào đó, và dính Javascript thực hiện như sau)
- Dùng AJAX gửi một yêu cầu đến trang abc.php. Khi đó (như trên), server sẽ trả về mã HTML, trong đó có chứa token nằm trong Hidden Field.
- Dùng Javascript lấy token trong mớ HTML này, rồi cứ thế dùng AJAX gửi các yêu cầu POST đến trang abc.php để xoá các thứ.
Liệu kịch bản này có xảy ra không ạ ?
Có thể xảy ra nếu như trang thứ ba mà bạn nói có cùng origin [1] với abc.php. Nói cách khác, nếu mà đã bị XSS rồi thì kẻ tấn công có thể dễ dàng vượt qua các cơ chế phòng thủ CSRF.
[1] http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy.
-m
|
|
|
hi Windak, anh đánh số mấy cái ý của em để dễ trả lời bên dưới.
WinDak wrote:
1. Hi anh em hiểu mấy cái anh nói, em chỉ thắc mắc là không biết nó có liên quan gì đến chosen plaintext attack vì theo em hiểu chosen plaintext attack giúp tìm được key hoặc một phần thông tin về key khi attacker có thể chọn plaintext để encrypt. Trong các ví dụ của anh key vẫn hoàn toàn chưa lộ.
2. Hơn nữa với bất cứ encryption nào, hàm encrypt với 1 key là hàm one-to-one và onto. Ở các chế độ làm việc như CBC hay CTR nếu không đổi IV thì giá trị cipher text cũng không thể đổi nếu key giữ nguyên. Theo em biết IV có thể được gửi kèm với cypher text để phục vụ cho việc giải mã mà không ảnh hưởng đến tính bảo mật.
3. Ở encryption mà alice post, tương tự T(0) hoàn toàn có thể được thay đổi và gửi kèm cùng cipher text. Việc lộ T(0) không nên ảnh hưởng đến độ bảo mật của hàm mã hoá. Đúng như anh nói là đây chính là điểm cần phải chứng minh và kiểm nghiệm.
1. em hiểu vậy là không đúng rồi. mục tiêu của một hệ mã là để bảo vệ bản rõ, chứ không phải bảo vệ khoá. khoá là một trong những phương tiện để đạt được mục tiêu đó. chẳng hạn như em cũng thấy các thuật toán mã hoá tất định mà anh liệt kê ra ở trên đều không tiết lộ khoá, nhưng rõ ràng là chúng không an toàn.
2. em quan sát chính xác. dẫu vậy định nghĩa của CBC và CTR đều bắt buộc IV phải là ngẫu nhiên và không thể đoán trước. khi em xài CBC hay CTR mà IV là cố định hay có thể đoán trước thì sẽ bị nhiều dạng tấn công. vừa rồi có tin đồn mã nguồn IPSEC trong nhân OpenBSD bị gài cửa hậu và dạng cửa hậu bị gài vào có thể chỉ đơn giản là làm cho IV đoán trước được.
3. em đọc lại bài ở trên của anh. alice có nói là T[0] được dẫn suất từ khoá Z, chứ không phải là một chuỗi ngẫu nhiên như vai trò của IV trong CBC.
-m
|
|
|
@StarGhost: các ý kiến của bạn về việc phân chia giữa mật mã cụm và chế độ hoạt động mình thấy rất hợp lý.
mình cũng nghĩ nắn T được dùng như IV, nhưng mà trong phần cuối alice có viết thế này (đoạn tô màu vàng là do mình tô):
alice wrote:
Khả năng bảo mật của thuật toán này dựa trên khóa Z, còn các khóa T(0) và U chỉ nên được xem là củng cố tính bảo mật. (Nhắc lại rằng T(0) có được dùng hay không còn tùy theo chế độ vận hành.) Vì lẽ đó, các tác giả phân loại thuật toán ở độ bảo mật 5w bit, hơn là 10w bit. Điều này hẳn nhiên ảnh hưởng đến việc lựa chọn tham số trao đổi khóa (key exchange) và dẫn xuất khóa (key derivation). Ví dụ, để trao đổi khóa bằng phương pháp Diffie-Hellman trên nhóm các điểm của một đường cong elliptic xác định trên một trường số nguyên modulo p (p nguyên tố) thì nên chọn đường cong với số điểm là một số 10w bit. Khi dẫn xuất các khóa, nên chọn 5w bit ngẫu nhiên làm khóa Z, rồi từ Z dẫn xuất T(0) và U bằng một hàm băm mật mã (cryptographic hash function) có 10w bit trạng thái bên trong.
--->: nếu mình không nhầm thì hàm ý của đoạn này là T(0) (và nghĩa là toàn bộ T) sẽ được xác định bởi Z. mình thấy chỗ này khác với bài báo giới thiệu LRW, trong đó người ta có nói là T thật ra đóng vai trò như IV và vì thế có thể lấy những giá trị không cần phải là bí mật nhưng đương nhiên là phải đảm bảo vai trò của một IV, ví dụ như ngẫu nhiên, duy nhất và không thể đoán trước.
@Windak: àh ý của anh là ý thứ hai đó. bây giờ giả sử bản rõ chỉ chứa một trong hai giá trị:
Code:
x = chiến đấu
y = đầu hàng
và giả sử em không đổi khoá. lúc này nếu lần mã hoá nào cũng cho kết quả giống nhau, thì ở trận chiến thứ nhất, có thể đối phương sẽ không biết bản rõ của em là gì, nhưng sang đến trận chiến thứ hai thì chỉ cần quan sát bản mã em gửi ra là đối phương có thể biết được em muốn đánh hay muốn hoà rồi.
một ví dụ gần gũi hơn là bầu cử. giả sử chỉ có hai ứng viên, nghĩa là bản rõ của em chỉ là một trong hai giá trị {0, 1}. lúc này nếu mã hoá luôn cho kết quả giống nhau, thì có mã hoá cũng như không.
tình huống tương tự cũng có thể xảy ra với việc đấu thầu. chẳng hạn như bên kêu mời thầu gửi khoá công khai của họ cho các bên tham gia đấu thầu. các bên này sẽ mã hoá con số dự thầu của họ và gửi lại cho bên mời thầu. con số dự thầu này chắc chắn nằm trong một khoảng nào đó, và nếu mã hoá là tất định thì một người có thể dễ dàng đoán được con số dự thầu của các đối thủ.
nói cách khác, câu hỏi là: làm sao có thể dùng lại khoá nhiều lần mà vẫn an toàn? (vì nếu mà chỉ dùng khoá được một lần rồi phải đổi, thì thôi dùng one time pad luôn cho nó sướng . muốn như thế, thì điều kiện cần là mỗi lần mã hoá, dẫu cùng khoá, cùng bản rõ, kết quả phải là những bản mã khác nhau hoàn toàn.
đương nhiên các mật mã cụm như AES hay DES không làm được việc đó. thành ra người ta mới xây dựng ra các chế độ hoạt động cho các mật mã cụm này và chính các chế độ hoạt động mới đảm bảo được tính xác suất của các thuật toán mã hoá.
sự phân tách rõ ràng này, như StarGhost nói, giúp ích rất nhiều trong việc tìm hiểu, phân tích và chứng minh tính bảo mật của các thuật toán mã hoá. chẳng hạn như mặc dù không thể chứng minh AES hay DES là an toàn (secure pseudo random permutation), nhưng có thể chứng minh được các chế độ hoạt động CBC hay CTR là an toàn với một số điều kiện và giả thuyết nhất định.
-m
|
|
|
@alice: cảm ơn bạn đã gửi bài này. mình đã đọc hai lần và có chỗ thắc mắc sau đây nhờ alice hoặc bạn nào theo dõi bài này giải đáp giùm.
alice viết rằng:
10. Nhược điểm thứ hai của thuật toán sơ khai này, nói đúng ra thì là của mọi mật mã cụm, nằm ở tính chất cụm. Giá trị của cụm mã Y chỉ phụ thuộc vào giá trị của cụm mã X và khóa Z. Phương thức mã hóa chia bản rõ thành từng cụm rồi dùng khóa mã hóa từng cụm một cách độc lập với nhau trong kĩ thuật mật mã gọi là chế độ sổ mã điện tử (Electronic Code Book), viết tắt là ECB. Nếu dùng Z để mã hóa một bản rõ có những giá trị cụm nào đó xuất hiện nhiều lần thì những giá trị cụm mã tương ứng cũng xuất hiện nhiều lần ở vị trí tương ứng trong bản mã, dẫn đến tiết lộ một phần thông tin về bản rõ.
đây đúng là vấn đề của tất cả các mật mã cụm và người ta giải quyết bằng cách thiết lập ra các chế độ hoạt động khác nhau (mà LRW mà alice đưa ra ở phần cuối cũng là một trong số đó). theo mình đọc và hiểu thì thuật toán mã hoá bằng phép nhân được mô tả ở đây bao gồm của một mật mã cụm (có thể nắn) và một chế độ hoạt động cho mật mã cụm này. nếu đúng là như thế thì đây là một điểm rất lạ, bởi lẽ trước giờ mình chỉ thấy mật mã cụm và chế độ hoạt động được thiết kế tách biệt nhau, đây là lần đầu tiên mình thấy một thuật toán mã hoá hướng đến giải quyết cả hai vấn đề này cùng một lúc.
nhìn kỹ thì thấy mật mã cụm nhận vào X, (Z, U) và T. bộ đôi (Z, U) đóng vai trò là khoá như chúng ta vẫn thấy trong các mật mã cụm thông thường. nghĩa là nếu bỏ T ra, thì mật mã cụm mà alice mô tả chính là một mật mã cụm thông thường như AES hay DES. điểm khác biệt ở đây là nắn T:
Nắn T được sinh ra từ số thứ tự của cụm và một khóa 4w bit, gọi là khóa nắn, theo cách giống hệt như các đơn vị được sinh ra từ số thứ tự vòng và khóa đơn vị. Cụ thể như sau.
Gọi T(j) là nắn dùng để mã hóa cụm thứ j. Đối với cụm đầu tiên (j=0), giá trị khóa nắn được dùng luôn làm nắn:
[indent]T(0) = khóa nắn[/indent]
Nắn cho cụm sau được tính từ nắn của cụm trước, theo công thức truy hồi:
[indent]T(j+1) = T(j) + 2*T(0) + 1[/indent]
Hoặc, nếu cần truy nhập ngẫu nhiên đến cụm thứ j, ta có thể tính trực tiếp:
[indent]T(j) = T(0) . j[/indent]
việc thêm nắn T này vào theo mình thấy chính là việc xác định chế độ hoạt động cho mật mã cụm ở trên. vấn đề là các nắn T(j) được xác định hoàn toàn tất dịnh dựa vào khoá nắn. điều này làm mình không thấy rõ thuật toán mã hoá bằng phép nhân an toàn trước tấn công chọn bản rõ (chosen plaintext attack). có lẽ do mình không thấy có yếu tố ngẫu nhiên nào được trộn vào bản rõ trong quá trình lập mã. bây giờ giả sử mình mã hoá một bản rõ m (bao gồm n cụm) i lần, thì mặc dù các cụm sẽ được mã hoá khác nhau (nhờ nắn T), nhưng theo mình thấy là i bản mã thu được sẽ giống nhau.
-m
|
|
|
nói về debugger thì vài năm gần đây người ta có xu hướng chuyển qua xài các programmable debugger, tạm dịch là trình gỡ rối lập trình được.
ý tưởng của các programmable debugger có thể tóm gọn lại là nhét các thao tác cơ bản của một trình gỡ rối, ví dụ như dịch ra mã hợp ngữ, cài đặt/gỡ bỏ ngắt, thay đổi/xem xét bộ nhớ và con trỏ, vào thành một thư viện của một ngôn ngữ kịch bản nào đó (nên còn lại là scriptable debugger). lúc này thay vì dùng chung một trình gỡ rối là gdb cho tất cả các chương trình, thì bạn có thể viết ra một trình gỡ rối cụ thể dành riêng cho chương trình mà bạn đang muốn gỡ rối.
các programmable debugger đem đến các lợi ích như:
1. tự động hóa các thao tác gỡ rối. ví dụ như ngắt tại địa chỉ x, chép 512 bytes bộ nhớ mà eax đang trỏ đến, dịch ngược ra hợp ngữ và làm lại 100 lần để so sánh. ở góc độ nào đó, thì gdb script cũng làm được, nhưng mà thử tưởng tượng giờ bạn có nguyên một cái ngôn ngữ lập trình đầy đủ sức mạnh như Python và Ruby để hỗ trợ thì công việc sẽ đơn giản hơn nhiều. bạn chỉ cần viết một cái script nhỏ, chạy một phát là xong.
2. dễ viết các công cụ hỗ trợ. ví dụ như giờ bạn muốn viết một cái chương trình truy vết (hit tracer, process stalker) hoặc một cái memory fuzzer, hoặc một cái "pokefinder" để sửa bộ nhớ tự động... thì dùng mấy cái thư viện này sẽ làm công việc của bạn đơn giản hơn nhiều.
3. xuyên hệ điều hành. các thư viện này đều cung cấp một bộ API duy nhất cho tất cả hệ điều hành. cùng một loại script có thể chạy được với chương trình viết trên Windows, Linux và Mac.
một vài programmable debugger cho Linux:
1. http://visi.kenshoto.com/: viết bằng Python, dễ xài, nhưng ít tài liệu.
2. http://github.com/tduehr/ragweed: viết bằng Ruby. cái này của một vài đồng nghiệp của tôi làm, tôi chưa xài nên chưa biết thế nào, nhưng thấy họ tập trung phát triển nó dữ lắm, tài liệu cũng có vẻ tốt hơn visi.
hạn chế lớn nhất của các programmable debugger là tốc độ và sự hỗ trợ dành cho các nền tảng phần cứng khác nhau. nếu bạn cần tốc độ và cần hỗ trợ cho các loại phần cứng khác, thì hãy thử http://www.pintool.org/ hoặc http://dynamorio.org/. mấy cái framework này cũng tương tự như programmable debugger, chỉ khác ở chỗ là bạn phải viết bằng C/C++.
-m
|
|
|
@explorer88: mình nghĩ vấn đề của bạn là do các chương trình bạn đã viết phần nhiều là đơn giản, có thể tìm thấy các triển khai sẵn có trên mạng. giờ bạn thử "tự đặt hàng" bản thân viết các chương trình phức tạp hơn xem.
ví dụ như thay vì các chương trình dạng CRUD (create, update, delete) thì bạn thử viết các chương trình liên quan đến trí tuệ nhân tạo, lập trình cấp hệ thống, xử lý tín hiệu số, mã hoá/giải mã/ký và kiểm tra chữ ký... đương nhiên cũng sẽ sẵn có ví dụ, nhưng mà lúc này bạn sẽ không chỉ đơn thuần chép về là được nữa, bởi vì bạn cần phải có kiến thức chuyên ngành mới biết là chép cái gì, không chép cái gì và nhiều khi sẽ không có sẵn để mà chép.
một vài ví dụ để bạn có thể bắt đầu:
1. viết chương trình phân tích xem bao nhiêu bài viết ở mục Tâm Sự của VnExpress là do cùng một hoặc một nhóm nhỏ người viết .
2. viết một chương trình lắng nghe 10s của một bài hát, rồi cho biết tên của bài hát. ví dụ như cho nó nghe một đoạn nhạc Trịnh Công Sơn, nó sẽ biết đó là bài hát nào của Trịnh Công Sơn.
3. viết một máy chủ HTTP nhỏ, có hỗ trợ SSL/TLS.
-m
|
|
|
@ngoclucbao:
1. cookie đó đúng là được mã hoá. cách thức mã hoá thế nào, nội dung cookie bên trong ra sao, trình tự xử lý trên phía máy chủ... được mô tả chi tiết ở đây http://msdn.microsoft.com/en-us/library/ff647070.aspx.
bạn có thể mở file web.config, lấy machineKey trong đó ra, rồi thử giải mã cookie theo mô tả trong tài liệu. tuỳ theo cấu hình mà cookie có thể được mã hoá bằng AES hoặc 3DES theo cơ chế CBC. nếu mấy cái từ này nghe lạ, thì đây cũng là một cơ hội để tìm hiểu chúng.
2. trước đây lúc mình tìm hiểu thì mình biết là có thể đem cookie từ máy này sang máy khác. hiện giờ thì không biết MS họ có đưa thêm cơ chế bảo vệ nào không, nhưng mình tin là vẫn có thể đem cookie từ máy này sang máy khác.
@DominaTD: bạn nên trả lời đúng câu hỏi của người hỏi. nếu không biết thì cũng không nên chép bài chỗ khác sang để làm câu trả lời.
-m
|
|
|
cố gắng học tiếng Anh và học thật tốt toán.
tiếng Anh thì rõ ràng lợi ích rồi, nên không cần phải nói nhiều. bây giờ mà tiếng Anh không nghe nói đọc viết tốt thì nhiều thiệt hại cho bản thân lắm, thành ra cố gắng mà thành thạo các kỹ năng đó. nếu có được một chứng chỉ này nọ thì tốt khi đi xin việc hay đi học tiếp.
về toán thì phải học toán như là sinh viên toán học toán, chứ không phải sinh viên KHMT học toán.
mình nhớ đại học dạy nhiều toán, nhưng mà hồi đó học hành không đàng hoàng, đến nỗi giờ tên môn học cũng không nhớ, chỉ nhớ là trong chương trình có đại số tuyến tính, xác suất thống kê, phương pháp tính (numerical analysis), toán rời rạc (logic, tổ hợp, đồ thị), đại số trừu tượng cùng một ít lý thuyết số, lý thuyết thông tin, lý thuyết automata, lý thuyết tính toán và độ phức tạp tính toán.
những món này mình nhớ một phần là vì sau này mình đều phải mày mò học lại, do nhu cầu công việc. mình thử liệt kê dưới đây dây mơ rễ má của mấy môn toán này với các ngành/môn học mà mình biết. chắc chắc là còn nhiều thiếu sót, bạn nào biết bổ sung thêm giúp.
lý thuyết thông tin => mật mã hóa
lý thuyết automata => trình biên dịch, lý thuyết tính toán và độ phức tạp tính toán
lý thuyết tính toán và độ phức tạp tính toán => phân tích và thiết kế giải thuật, lý thuyết số tính toán, mật mã hóa. hai món này là phải học, đơn giản vì chúng nó là cốt lõi của khoa học máy tính.
đại số trừu tượng và lý thuyết số => lý thuyết số tính toán, mật mã hóa
toán rời rạc => phân tích và thiết kế giải thuật, xác suất thống kê, mạng máy tính, mật mã hóa. nhìn chung môn học nào của ngành KHMT cũng dính đến toán rời rạc.
phương pháp tính => machine learning
xác suất thống kê => mật mã hóa, machine learning. món này cũng giống như toán rời rạc, mình thấy làm gì cũng cần.
đại số tuyến tính => đồ họa máy tính, xác suất thống kê, machine learning
-m
|
|
|
@DominaTD: chào mừng bạn đến với HVA. nhìn cách trình bày rõ ràng mạch lạc của bạn mình tin là bạn phù hợp với những ngành kỹ thuật .
-m
|
|
|
Thera,
Nếu tiếng Anh của bạn tốt thì hãy thử theo học 3 lớp lập trình miễn phí của đại học Stanford ở đây:
http://see.stanford.edu/see/courses.aspx
-m
|
|
|
hi hi mình không nói là nếu học tài chính, ngân hàng, kinh doanh, quản lý thì không phải học. mình chỉ nói là nếu làm ăn buôn bán nhỏ thì chẳng cần phải học hành gì nhiều.
-m
|
|
|
mình có đứa em, bán quần áo trên 5giay, mỗi năm thu nhập tầm khoảng 800 triệu đến 1 tỉ. hi hi mình đi làm hơn tám năm, kinh nghiệm, kiến thức, quan hệ có thể xem là tốt hơn so với mặt bằng chung, nhưng mà muốn có kiếm 100 triệu/tháng bằng công việc chuyên môn thuần tuý thì không hề đơn giản, bởi vì ít có cty nào trả mức lương đó, thành ra phải làm nhiều việc cùng lúc.
hiện tại thì ổn hơn, tự vì ở nơi mình đang làm việc, họ trả lương xứng đáng với năng lực chuyên môn, thành ra không cần phải "tay trong tay ngoài" nữa. thành ra nếu bạn nào muốn có được một thu nhập tốt trong ngành máy tính, thì nên nghĩ đến việc ra nước ngoài làm việc.
còn như ở VN, có nhiều bạn thấy anh A, anh B làm việc trong ngành máy tính, mua được nhà cửa xe cộ này nọ thì đừng tưởng nhầm rằng thu nhập đó là do công việc chuyên môn. thiệt ra hầu hết các anh đó đã ngừng làm kỹ thuật từ lâu, mà chuyển qua làm quản lý, kinh doanh, rồi kiếm tiền từ vị trí và quan hệ.
thành ra nếu đặt mục tiêu là kiếm nhiều tiền hơn thì mình có lời khuyên là nên học những ngành tài chính, ngân hàng, kinh doanh hoặc thậm chí là không cần học, chịu khó làm ăn buôn bán nhỏ, quần áo, giày dép, hàng điện tử, chắc chắn sẽ kiếm nhiều tiền hơn, nhanh hơn và dễ hơn so với làm kỹ sư máy tính.
vậy có nên học cao và học cao để làm gì? hi hi đây là hai câu hỏi thú vị và quan trọng.
cá nhân mình thì ủng hộ việc học, đơn giản vì... sướng. học cao hiểu rộng, đi cùng với thế giới, thấu hiểu bản chất của sự vật sự việc, tiếp cận và nếu được thì sáng tạo và đóng góp vào kho tàng tri thức nhân loại... là những niềm hạnh phúc lớn lao mà bao nhiêu tiền cũng không thể mua được.
hãy nghe anh Đàm Thanh Sơn mô tả về hạnh phúc của anh ấy khi hiểu được cơ học lượng tử:
Đàm Thanh Sơn wrote:
Tôi vẫn nhớ lần đầu tiên mình thực sự hiểu được cơ học lượng tử là lúc tôi học năm thứ 3 đại học. Sau đó trong một vài ngày, tôi đi ngoài đường với trạng thái lâng lâng, nhìn những khuôn mặt của những người đi trên đường và nghĩ: những con người kia phần lớn là những người bất hạnh, vì họ cũng như mình vài ngày trước đây không hiểu gì về bản chất lượng tử của thế giới. Cảm giác đó đã qua từ lâu, nhưng tôi nghĩ trong tương lai gần, nếu không phải là ngay bây giờ, một con người được giáo dục toàn diện phải biết những khái niệm cơ bản của cơ học lượng tử, cũng như ai cũng biết đến ba định luật của Newton, hay nguồn gốc phân tử của tính di truyền. Đó là vì không biết các định luật lượng tử thì khó thưởng thức được một phần cái Đẹp của thế giới quanh ta, cái đẹp ở mức nguyên tử.
thế giới bao la rộng lớn và còn rất rất nhiều cái đẹp...
-m
|
|
|
Một điều tra rất thú vị của http://twitter.com/ioerror
https://blog.torproject.org/blog/detecting-certificate-authority-compromises-and-web-browser-collusion
-m
|
|
|
có lẽ là bạn chưa dựng máy chủ IMAP? máy chủ webmail chỉ là phần "frontend" của phần "backend" là một máy chủ IMAP.
-m
|
|
|
vào hạ tuần tháng 5/2010, bọn mình sẽ trình bày ở hội thảo IEEE S&P http://www.ieee-security.org/TC/SP2011/program.html với paper "Cryptography in the Web: The Case of Cryptographic Design Flaws in ASP.NET":
This paper discusses how cryptography is misused in the security design of a large part of the Web. Our focus is on ASP.NET, the web application framework developed by Microsoft that powers 25% of all Internet web sites. We show that attackers can abuse multiple cryptographic design flaws to compromise ASP.NET web applications. We describe practical and highly efficient attacks that allow attackers to steal cryptographic secret keys and forge authentication tokens to access sensitive information. The attacks combine decryption oracles, unauthenticated encryptions, and the reuse of keys for different encryption purposes. Finally, we give some reasons why cryptography is often misused in web technologies, and recommend steps to avoid these mistakes.
hi hi lần này thay đổi không khí, nộp paper cho một hội thảo hàn lâm, may mắn là không những họ "không kỳ thị" mà còn ủng hộ, giúp đỡ chỉnh sửa và làm cho paper tốt lên rất nhiều. mình đang tham khảo lại cái quy định về bản quyền của bọn IEEE, nếu không có vấn đề gì thì vài ngày nữa mình sẽ gửi paper lên đây. thiệt ra thì bạn nào có hứng thú, PM cho mình, mình sẽ gửi paper.
paper này đánh dấu chặng đường hai năm của dự án nghiên cứu cách thức các kỹ thuật cryptography được sử dụng (sai) trong môi trường phát triển web. hai năm trước, cá nhân mình còn rất mù mờ về cryptography nói chung và sử dụng cryptography nói riêng. những điều mình biết chủ yếu gói gọn trong cuốn sách "Practical Cryptography" http://www.schneier.com/book-practical.html) của Niels Ferguson và Bruce Schneier. thật tế là hầu hết các tấn công mà bọn mình sử dụng trong các nghiên cứu vừa qua đều được đề cập đến trong cuốn PC. dẫu vậy, mình rút ra được điều cơ bản là đọc sách thì phải đào sâu vào những điểm mà sách đưa ra.
ví dụ như sách có nói về length-extension attack trong các hàm hash theo mô hình Merkle-Damgard nhưng không nói cụ thể về cách thức triển khai tấn công. bọn mình tò mò, tìm hiểu cách triển khai tấn công này (cũng như tìm hiểu cấu trúc của MD5 và SHA1), và "tình cờ" (như gamma95 thường nói phát hiện ra có thể sử dụng phương thức này để tấn công bộ API của Flickr. hoặc như sách nói nếu xử lý padding không đúng, có thể khiến cho hệ thống bị tấn công theo phương thức "chosen-ciphertext attack" nhưng cũng không nói cụ thể thế nào, mà chỉ trích dẫn một paper khác.
cryptography không phải là một giải pháp trọn vẹn cho vấn đề security, nhưng mà cryptography là một phần của tất cả các giải pháp cho các vấn đề security. dẫu vậy, sử dụng cryptography đúng cách là không dễ và hiện giờ lập trình viên cũng không được hỗ trợ như đối với các vấn đề liên quan đến memory corruption. số lỗ hổng cryptography là rất nhiều và hầu hết là nghiêm trọng. thật tế nhắm mắt tìm trên Google các đoạn mã cryptography, thì cá nhân mình thấy phần lớn trong số đó là không an toàn. không nói chi xa, mới cách đây vài giờ, mình thấy cái link này trên Twitter http://nenolod.net/~nenolod/sholes-keyleak-explained.html.
theo quan sát của mình thì hiện giờ trong cộng đồng security ở VN cũng như nước ngoài, có rất ít người tập trung vào đề tài đánh giá việc sử dụng cryptography đúng cách trong các phần mềm thương mại. đây là một cơ hội cho bạn nào muốn làm nghiên cứu trong mảng đề tài an ninh ứng dụng. ngoài an ninh ứng dụng ra, thì có thể kết hợp cryptography và hardware reverse engineering để nghiên cứu cách cryptography được sử dụng trong các thiết bị điện tử cá nhân như đầu đọc sách, đồ chơi, điện thoại hoặc các loại smartcard như thẻ thanh toán. đây cũng là lĩnh vực còn ít người làm và còn nhiều cái để làm. sắp tới mình cũng sẽ đi theo hướng đó.
-m
|
|
|
mới có thêm một paper mô tả một kỹ thuật LFI mới và tổng kết sơ bộ các kỹ thuật cũ: http://gynvael.coldwind.pl/?id=376&lang=en
-m
|
|
|
kimchinh_no1 wrote:
Học theo những người tài năng để tài năng hơn họ
"try to be better than ourselves, not try to be better than anyone else". học để ngày mai tài năng hơn chính bản thân mình của ngày hôm qua. học như vậy mới thấy vui, mà vui thì mới còn muốn học tiếp.
còn học để so sánh cạnh tranh với người này người khác thì việc học sẽ trở thành một hành trình nhiều đau khổ hơn là niềm vui. hết đèo, rồi sẽ gặp đồi; hết đồi, rồi sẽ gặp núi; hết núi này thì gặp núi cao; hết núi cao thì sẽ gặp núi cao hơn...bao giờ mới đến miền cực lạc?
-m
|
|
|
trước khi thảo luận tiếp, mình nghĩ có một số *tiêu chuẩn* mà mọi người nên xem qua (để đảm bảo "we are all on the same page" :
+ PKCS5, phần Password-Based Key Derivation Function.
+ Bcrypt, http://www.usenix.org/events/usenix99/provos/provos.pdf.
+ Scrypt, http://www.tarsnap.com/scrypt.html.
-m
|
|
|
@eicar: cho mình hỏi một cái này ngoài lề chút. bạn nói là kiểm tra tính đúng đắn của giao thức và kiểm tra sự tồn tại của virus trong trường hợp tổng quát là NP-complete, nhưng mà theo mình thấy thì mấy bài toán dạng này phải là undecidable giống như bài toán dừng chứ nhỉ?
-m
|
|
|
@SG: ah há, sao khi gửi cái reply vừa rồi mình mới hiểu ý của SG. đúng là nếu dùng OTP thì cái scheme sẽ hoàn toàn bị phá vỡ một cách đơn giản. haha hình như trong cái video mình gửi, đoạn sau ông giáo sư có nói đến cái này.
giải thích cho bạn nào muốn tìm hiểu (ghi sẵn mã latex, để mai mốt anh conmale có hỗ trợ latex thì nó thành hình cho đẹp):
- giả sử message là P, key của server [latex]K_s[/latex], key của client là [latex]K_c[/latex].
- dùng OTP, nên client sẽ gửi cho server: [latex]C_1 = K_c \oplus P[/latex].
- server nhận được [latex]C_1[/latex], sẽ gửi ngược lại cho client:
[latex]C_2 = K_s \oplus C_1 = K_s \oplus K_c \oplus P[/latex].
- lúc này attacker có [latex]C_1[/latex] và [latex]C_2[/latex], nên sẽ tính được:
[latex]C_1 \oplus C_2 = K_c \oplus P \oplus K_s \oplus C_1 \oplus P = K_s[/latex].
- nhận được C_2, client sẽ gửi ngược lại cho server:
[latex]C_3 = C_2 \oplus K_c = K_s \oplus P[/latex].
- có C_3, có K_s, attacker sẽ tính được P.
-m
|
|
|
@StarGhost: ờ thì sử dụng OTP thì sẽ phải giải quyết những hạn chế của OTP. ví dụ như vấn đề mà StarGhost đưa ra thì làm sao đảm bảo key (hoặc key stream) chỉ dùng một lần thôi.
khi đưa ra ví dụ sử dụng OTP, ý mình chỉ là nó là một ví dụ đơn giản rõ ràng cho một cái hệ mã có tính giao hoán, để minh hoạ như là một lời giải của bài toán "một hòm hai chìa khoá" :-D.
-m
|
|
|
StarGhost wrote:
Mình biết có một ý tưởng như sau: làm một cái hòm có 2 ổ khoá, user sau khi cho password vào hòm sẽ khoá lại bằng ổ của mình, sau đó gửi đến server. Server sau đó khoá cái ổ còn lại và gửi về user. User mở khoá của mình và gửi hòm lại server. Server mở khoá hòm và lấy password, sau đó hash nó và so sánh với giá trị hash trong database.
Để hiện thực hoá cần hai one-to-one mappings f và g (tượng trưng cho 2 ổ khoá) với commutative composition. Ví dụ lý tưởng là commutative encryption. Mình thấy cũng thú vị nếu các bạn thảo luận về những vấn đề liên quan đến giải pháp này.
Hi hi mình thấy cái ví dụ ổ khoá này giống cái ví dụ ở trong một cái video mà mình có xem qua ([1]). Ở đó ông giáo sư có nói đến một giải pháp đơn giản là dùng one-time pad. Bản chất của one-time pad là phép cộng trên trường hữu hạn GF(2), và phép cộng này có tính giao hoán (commutative), nên, như StarGhost nói, có thể dùng nó để hiện thực hóa giao thức "một hòm hai khóa" .
[1] - http://mitworld.mit.edu/video/42
-m
|
|
|
Đọc sách xong thì thấy là hiểu.
Viết lại mới nhận ra là hiểu chưa đúng và đủ ý.
Giảng giải cho người khác mới ngộ thấy là không hiểu gì cả.
Tóm lại: bao giờ đọc một cái gì đó cũng phải kết hợp đọc, viết và nói. Phải làm sao có thể tự trình bày trơn tru những ý chính trong sách, giảng giải rõ ràng mạch lạc cho người ngoại đạo mà không cần nhìn sách.
-m
|
|
|
chào mọi người,
mình bắt đầu viết loạt bài trên blog cá nhân (vì hiện giờ HVA chưa hỗ trợ LaTeX) để giới thiệu mật mã hiện đại. hi vọng là sẽ nhận được nhiều góp ý, câu hỏi cũng như thảo luận.
- Bài 1: http://vnhacker.blogspot.com/2010/05/mat-ma-hien-ai-1.html
-m
|
|
|
|
|
|
|