it-swarm-vi.com

Tôi có thể học mật mã / mật mã ở đâu một cách khó khăn, mà không cần đến trường? Cuốn sách nào hay?

Tôi không quá giỏi môn toán:

Tôi biết thế nào là danh sách p và kết hợp p, tôi biết đại số ma trận, tôi biết a XOR là gì, tôi biết làm thế nào để biết số đó có phải là số nguyên tố không, v.v .: Tôi không lập trình viên ghét môn toán vì anh ta kém về nó, nhưng dù sao tôi cũng không có bằng tiến sĩ.

Tôi cũng không tệ về khoa học máy tính, ít nhất là về mặt văn hóa khoa học máy tính nói chung:

Tôi biết C, C++ (cả hai đều học ở trường), python, một số haskell, mã hóa văn bản nào ở ngoài đó, UNICODE hoạt động như thế nào thuật toán LZMA, DES, AES, Serpent, Blowfish, SHA, MD5 ...). Tôi đã rất quan tâm đến mật mã trên wikipedia hoặc các trang web khác, nhưng tôi không nghĩ wikipedia có thể dạy tôi mật mã mà không cần chi tiết các thuật toán hoặc không cần thực hành; ví dụ tôi biết thế nào là mật mã đồng bộ và thế nào là không đồng bộ (khóa chung/khóa riêng).

Tôi muốn tìm hiểu cách thực hiện đúng và an toàn các thuật toán phổ biến nhất và cách làm cho chúng đáng tin cậy: một cuốn sách hoặc các hướng dẫn hoặc khóa học tốt. Tôi đã nhanh chóng tìm kiếm trên Khan Academy, nhưng môn học này không tầm thường và đòi hỏi cả kiến ​​thức về toán học, khoa học máy tính và/hoặc điện tử.

Tôi không muốn đọc các trang và trang chỉ lý thuyết về những điều cơ bản mà tôi có thể đã biết hoặc có thể không thực sự liên quan đến mật mã ngày nay, giống như một bài báo được viết bởi một nhà nghiên cứu, chỉ là một điều gì đó thực tế, với các vấn đề và các vấn đề về tiền điện tử, cho sinh viên.

Hiện tại tôi có nhiều thời gian rảnh, tôi chỉ mới 26 tuổi và tôi chắc chắn mình có thể học được những thứ này, không chỉ vì việc tăng lương mà nó có thể mang lại cho tôi mà còn bởi vì tôi luôn bị mê hoặc bởi mật mã mà không thực sự hiểu về nó, Tôi không thể tìm thấy bất kỳ tài liệu tốt.

39
jokoon

(LZMA là một thuật toán nén, không phải là mật mã.)

Với mục đích hiện thực thuật toán mã hóa, phương pháp chung là lấy tiêu chuẩn mô tả có liên quan, lấy bàn phím của bạn và thử. Hầu hết các tiêu chuẩn bao gồm "vectơ kiểm tra", tức là các giá trị mẫu cho phép bạn biết liệu việc triển khai của mình có trả lời đúng không. Tại thời điểm đó, mọi thứ khác nhau, tùy thuộc vào loại thuật toán bạn đang xem xét.

Mật mã đối xứng:

Các thuật toán đối xứng bao gồm mã hóa đối xứng, hàm băm và mã xác thực tin nhắn (MAC). Bạn không cần biết nhiều toán học để xử lý chúng; hầu hết là về việc bổ sung các số nguyên 32 bit và 64 bit (đó là số học mô-đun, với 232 hoặc 264 dưới dạng mô đun) và hoạt động theo bit (XOR, VÀ ...).

Mã như vậy thường được thực hiện trong C. Hiệu suất tốt đạt được bằng cách có một số khái niệm về cách trình biên dịch C sẽ hiểu và dịch mã thành các hướng dẫn cho CPU; kiến thức về hội không bắt buộc, nhưng khá hữu ích. Một tham số quan trọng là bộ nhớ cache: unrolling loop thường là một công cụ tốt, nhưng nếu bạn lạm dụng nó, hiệu suất sẽ giảm mạnh.

Tôi đề nghị bắt đầu bằng cách triển khai các hàm băm cổ điển (họ SHA, được mô tả trong Trin 180- ) và cố gắng làm cho chúng nhanh. Để làm điểm so sánh, hãy lấy OpenSSL và sử dụng công cụ dòng lệnh openssl speed Để xem loại hiệu suất nào có thể đạt được (công cụ này đã được bao gồm trong bất kỳ bản phân phối Linux tốt nào và nó cũng hoạt động trên Windows và MacOS). Chẳng hạn, trên PC của tôi:

$ openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 4842590 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 2820288 sha256's in 2.99s
Doing sha256 for 3s on 256 size blocks: 1262067 sha256's in 2.99s
Doing sha256 for 3s on 1024 size blocks: 395563 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 53564 sha256's in 3.00s
OpenSSL 0.9.8o 01 Jun 2010
built on: Wed Feb 23 00:47:27 UTC 2011
options:bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) blowfish(ptr2) 
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN
-DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int
-DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
sha256           25827.15k    60367.37k   108056.57k   135018.84k   146265.43k

điều đó có nghĩa là OpenSSL bao gồm triển khai SHA-256 được tối ưu hóa bằng tay trong hội, đạt được 146 MB/s khi xử lý các tin nhắn 8 kB. Trên cùng một máy, việc triển khai C thuần túy phải đạt tối thiểu 130 MB/s.

Để biết ví dụ về cách các hàm băm được triển khai trong C và Java và cách đo tốc độ băm theo cách có ý nghĩa, xem sphlib .

Sau đó, bạn có thể thử mã hóa đối xứng, đặc biệt là AES ( Trin 197 ). Nó giúp một chút để biết trường hữu hạn của đặc tính 2 là gì, nhưng tiêu chuẩn đủ rõ ràng để hướng dẫn bạn thực hiện chiếu lệ. Sau đó, cố gắng tối ưu hóa mọi thứ. OpenSSL có thể đóng vai trò là điểm so sánh và lấy cảm hứng từ triển khai AES của Brian Gladman . Về bảo mật, đã có một số lo ngại về những thông tin phụ thuộc khóa nào có thể bị rò rỉ thông qua việc sử dụng các bảng tra cứu trong quá trình thực hiện (thử tìm kiếm "tấn công thời gian bộ đệm AES"); cố gắng tái tạo kiểu tấn công đó là một bài tập rất tốt (hãy nhớ rằng, điều đó không dễ, nhưng nếu bạn thành công trong việc chứng minh nó trong điều kiện phòng thí nghiệm thì bạn sẽ học được rất nhiều về cách triển khai tiền điện tử).

Mật mã bất đối xứng:

Mật mã bất đối xứng là về các thuật toán liên quan đến nhiều bên. Điều này bao gồm mã hóa bất đối xứng (RSA, ElGamal), trao đổi khóa (Diffie-Hellman) và chữ ký số (một lần nữa RSA, DSA ...). Các nội dung toán học ở đó lớn hơn nhiều và tối ưu hóa là một chủ đề rộng hơn nhiều so với mật mã đối xứng, bởi vì có một số cách để thực hiện mỗi thuật toán, thay vì một đường dẫn thực hiện "rõ ràng".

Một tài liệu tham khảo tốt là Hướng dẫn về Mật mã đường cong Elliptic . Mặc dù chủ yếu là về các đường cong elip, nó bao gồm một cách xử lý chung về việc thực hiện các hoạt động trong các trường hữu hạn và do đó, đây là chương mẫu có thể được tải xuống miễn phí tại URL được liên kết ở trên. Vì vậy, có được nó và đọc nó bây giờ. Một tài liệu tham khảo không thể thiếu khác là Sổ tay về Mật mã học ứng dụng , có thể tải xuống miễn phí; Chương 14, đặc biệt, là về thực hiện hiệu quả.

RSA đủ đơn giản và được mô tả đầy đủ trong PKCS # 1 . Có thể tấn công thời gian trên RSA, được chống lại bằng cách che dấu (vâng, đây là một bài báo "được viết bởi một nhà nghiên cứu", nhưng trong chủ đề về mật mã, các nhà nghiên cứu là những người hiểu những gì đang diễn ra trên). Nếu bạn hiểu được số học mô-đun, bạn có thể thử triển khai DSA ( Trin 186- ). Diffie-Hellman đơn giản về mặt toán học (không cần nhiều hơn mức cần thiết để thực hiện DSA) nhưng tiêu chuẩn mô tả của nó (ANSI X9.42) không thể tải xuống miễn phí.

Đường cong elip là một sự thay thế phổ biến trong tương lai cho số học mô-đun; Các biến thể EC của DSA và Diffie-Hellman nhanh hơn và được cho là an toàn hơn với các khóa công khai ngắn hơn. Nhưng đó là toán học nhiều hơn. Một lần nữa, Hướng dẫn về Mật mã đường cong Elliptic là tài liệu tham khảo bắt buộc.

Có các loại thuật toán mã hóa bất đối xứng khác, ví dụ: McEliece hệ thống mật mã (mã hóa bất đối xứng; có một biến thể cho chữ ký được mô tả bởi Niederreiter ) và thuật toán dựa trên giảm mạng . Nhưng họ không (chưa) được hưởng lợi từ các tiêu chuẩn được công bố, quan tâm đến các chi tiết triển khai và không có quá nhiều triển khai hiện có để so sánh với. Bạn nên bắt đầu với RSA và DSA.

Phân tích mật mã:

Cryptanalysis sử dụng liều toán học cao hơn nhiều so với thực hiện.

Đối với mật mã đối xứng, hai công cụ chính là mã hóa vi phân và tuyến tính; xem hướng dẫn này .

Con đường riêng của tôi đến mật mã học bắt đầu bằng cách triển khai DES, và sau đó triển khai mã hóa tuyến tính của Matsui trên phiên bản rút gọn của DES (8 vòng thay vì 16). DES được mô tả trong Trin 46- , được rút chính thức, nhưng vẫn có sẵn. Từ DES có thể được xác định Triple-DES (ba trường hợp DES, với ba khóa riêng biệt, khóa giữa được sử dụng theo hướng "giải mã") và đã được xuất bản vectơ kiểm tra cho Triple-DES (còn được gọi là "TDES", "3DES" hoặc đôi khi là "DES", có thể gây nhầm lẫn).

Đối với các thuật toán bất đối xứng, phân tích mật mã chủ yếu liên quan đến việc làm việc trên cấu trúc toán học của các khóa, ví dụ: bằng cách cố gắng yếu tố số nguyên lớn không chính để phá vỡ các biến thể RSA. Toán học ở đây trải dài từ không tầm thường đến hoàn toàn không thể tưởng tượng được, vì vậy đây có thể là một đường cong học tập quá khó để bắt đầu mật mã bằng cách cố gắng phá vỡ RSA ...

46
Thomas Pornin

Hai điều, thực sự:

  1. Nhận một cuốn sách tốt. "Mật mã ứng dụng" của Bruce Schneier là đủ.
  2. Tìm hiểu các công cụ 'openssl' và tìm hiểu cách sử dụng chúng.

Điều quan trọng nhất về tiền điện tử để học là sự khiêm tốn. Bạn không muốn tạo ra một giải pháp mới một vấn đề - bạn muốn sao chép tốt nhất có thể các giải pháp đã được người khác kiểm tra tốt. Hầu hết các thất bại về tiền điện tử là do mọi người có một ý tưởng sáng suốt, nghĩ rằng họ có thể thực hiện một số tối ưu hóa để cải thiện một giải pháp hiện có. Chỉ có điều cực kỳ khiêm tốn mà cuối cùng thành công trong việc tìm ra cách làm mới.

Bài học tiếp theo là bạn đã học được những định kiến ​​của mình rằng bạn đã nhận được từ TV và phim ảnh, nơi một hacker ngồi xuống máy tính và phá vỡ tiền điện tử. Những thứ này hoặc không liên quan đến tiền điện tử, hoặc kịch tính hóa những gì thực sự diễn ra. Ví dụ, bộ phim "Sneaker" là một tác phẩm kịch tính về những gì sẽ xảy ra nếu ai đó phát triển một con chip có thể tạo ra các số nguyên lớn.

Điều khó nhất khi học tiền điện tử là phân biệt giữa các khái niệm kỹ thuật cần thiết để hiểu về lĩnh vực nói chung và những thứ bạn sẽ chỉ cần khi bạn chuyên về một khu vực hẹp. Lấy ví dụ, bài được đánh giá cao ở trên. Bạn cần hiểu sự khác biệt giữa thuật toán "đối xứng" so với thuật toán "bất đối xứng" so với "băm", nhưng khi tác giả của bài đăng đó nói "Nó giúp một chút để biết trường hữu hạn của đặc tính 2 là gì", Tôi sẽ không đồng ý: nó chỉ có ý nghĩa đối với các Tiến sĩ nghiên cứu về tiền điện tử, chứ không phải với phần còn lại của chúng tôi chỉ đơn giản là muốn tìm ra cách sử dụng nó một cách chính xác.

Một cách tốt để lội qua các chi tiết kỹ thuật là chọn mục tiêu và làm việc ngược lại. Ví dụ: hôm nay, Apple đã cập nhật hệ điều hành iPhone/iPad lên phiên bản 4.3.5 để sửa lỗi xác thực chuỗi chứng chỉ X.509. Hiểu vấn đề và lý do tại sao họ phải sửa nó chính xác là thứ mà bạn đang thảo luận trong bài viết gốc của bạn. Tìm hiểu chứng chỉ X.509 là gì, chuỗi là gì và tại sao chúng cần được xác thực và tại sao nếu bạn không, một hacker sử dụng công cụ như 'sslsniff' có thể đánh bại mã hóa. Một khi bạn hoàn toàn hiểu tất cả những điều đó, bạn sẽ đạt được nhiều mục tiêu mà bạn mô tả trong bài viết gốc của mình.

Một ví dụ khác là bài đăng trên blog về Xác minh khóa của Comodo Hacker

Một lần nữa, hãy tìm hiểu xem hacker Comodo đã làm gì (đã tạo chứng chỉ đã ký cho Google và Yahoo), cách thức thu hồi chứng chỉ hoạt động và cách sử dụng các công cụ để xác thực chứng chỉ đó. Tôi đề nghị đây là một bài viết hay vì đó là điểm khởi đầu tốt để sử dụng các công cụ 'openssl', là tiêu chuẩn trong ngành của chúng tôi.

Chúc may mắn!

10
Robert David Graham

Đăng ký trực tuyến của Stanford lớp Mật mã học bắt đầu vào tháng 1 năm sau. Nó miễn phí, trực tuyến, bao gồm cả lý thuyết (bài giảng video và câu đố) và thực hành (bài tập lập trình), hãy để bạn làm việc theo tốc độ của riêng bạn và bạn sẽ nhận được tuyên bố thành tựu nếu bạn thành công. Với những tiếng vang khác nhau mà tôi có được trong khóa học trực tuyến trước đây của Stanford, tôi chắc chắn đang đăng ký lớp học này (cũng như lớp Bảo mật máy tính).

  • Về mặt lý thuyết:

Nguyên tắc thiết kế kỹ thuật mật mã và các ứng dụng thực tế của Niels Ferguson và Bruce Schneier. Cuốn sách được dự định là một bản cập nhật của Mật mã học ứng dụng đáng kính, các tác giả nổi tiếng trong lĩnh vực này và đánh giá là tốt.

  • Về mặt thực hành:

Bạn có thể xem qua các cuộc thi hack/bảo mật CTF (Capture The Flag) khác nhau. Chúng thường bao gồm các thách thức về Mật mã học. Họ vui vẻ và đưa bạn ra khỏi vùng thoải mái của bạn để giải quyết các vấn đề trong một thời gian giới hạn. Đây là một tốt Lịch CTF . Ngoài ra, nhìn vào một số bài viết của các CTF trước đây, tôi thấy nhiều điều rất giáo dục và được giải thích rõ ràng.

10
kroosec

Đối với thuật toán tiền điện tử:

Stinson's Mật mã: Lý thuyết và thực hành

trải qua toán học của nhiều thuật toán mật mã theo cách có thể khiến chúng khá dễ thực hiện, nếu đó là điều bạn muốn làm.

Scheiner's Mật mã học ứng dụng cũng là một cuốn sách hàng đầu về chủ đề này. Có lẽ trùng lặp khá nhiều nhưng với một số thuật toán khác nhau.

Theo như một cuốn sách nói rõ cho bạn biết cách thực hiện chúng - tôi chẳng có gì cả. Về mặt thương mại, những thứ này không phải lúc nào cũng được triển khai trong phần mềm và đó là một ngành khá thích hợp. Từ góc độ chơi xung quanh, tôi muốn nói có một cuốn sách giải thích thuật toán, thực hiện nó và so sánh kết quả của bạn với một thư viện thường được sử dụng cho cùng một thuật toán.

Tương tự, tôi không có gì về tiền điện tử, mặc dù tôi nghi ngờ nếu bạn chọn một thuật toán và google cho những thứ như "điểm yếu" và "khóa yếu" bạn sẽ tìm thấy một số giấy tờ thú vị và thông tin khác. Lần trước tôi đã phải viết một bài báo về bất cứ điều gì như thế này (10 năm + trước) về cơ bản là những gì tôi đã làm ...

6
bethlakshmi

Tôi khuyên bạn nên Kỹ thuật mã hóa: Nguyên tắc thiết kế và ứng dụng thực tế . Đó là cuốn sách hoàn hảo cho bạn. Nó mô tả cách thiết kế và triển khai các hệ thống mật mã, từ quan điểm của một nhà thiết kế và triển khai hệ thống. Đó là một cuốn sách rất thực dụng, với một viễn cảnh bắt nguồn từ nhiều năm kinh nghiệm của các tác giả. Từ "kỹ thuật" trong tiêu đề là thực sự thích hợp. Tôi nghĩ bạn sẽ thấy đó là một nguồn tài nguyên vô giá giúp bạn ưu tiên những gì bạn nên dành phần lớn năng lượng để lo lắng, những gì có thể sai và làm thế nào để đảm bảo những điều tồi tệ đó không xảy ra với bạn.

4
D.W.

Tôi cũng sẽ thêm bạn vào xem Thử thách về tiền điện tử Matasano vì bạn đã có một số kỹ năng lập trình.

Từ trang web của họ:

TÔI CẦN BIẾT NHƯ THẾ NÀO? Không ai. Đó là điểm.

VÌ SAO TÔI CẦN BIẾT? Bạn sẽ muốn có thể viết thành thạo mã bằng bất kỳ ngôn ngữ nào. Chúng tôi đã nhận được các bài nộp bằng C, C++, Python, Ruby, Perl, Visual Basic, X86 hội, Haskell và LISP.

Tất cả các thách thức của họ đều dựa trên các lỗ hổng tiền điện tử trong thế giới thực, vì vậy bạn nên tìm hiểu những thứ hay ho để giải quyết những vấn đề này.

3
ack__

Nếu bạn muốn có bất kỳ hiểu biết nào về lý thuyết mật mã, được viết theo cách có thể truy cập được đối với các học viên, hãy thử "Giới thiệu về Mật mã học hiện đại" của Katz và Lindell.

3
user432944

Học mật mã từ đầu đôi khi có thể cảm thấy như một điều khó khăn nhưng nếu bạn có tài nguyên phù hợp, bạn sẽ hoàn toàn thích nó. Sau đây là các trang web yêu thích của tôi để giúp bạn bắt đầu học mật mã ngày hôm nay.

  1. Tìm hiểu mật mã tại Kifanga cho người mới bắt đầu hoàn thành đến cấp độ nâng cao hơn.
  2. Mật mã thực tế thực sự tốt cho các bài viết về tiền điện tử
  3. Learncryptography là tuyệt vời cho các hàm băm
0
chris pete