Breaking VISA mã PIN
Jul 02, 2008 tại Ngân hàng và EFTPoS
Dưới đây là một bài báo tôi được tìm thấy trong thời gian gần đây. Điều này một trong những mô tả toàn diện nhất của mã PIN xác minh giá trị gia tăng (PVV) hacking.
Tôi nghĩ tôi sẽ tái nó vào đây cho tôi địa phương tham khảo.
Như ý kiến đã được thực hiện liên quan đến ngữ pháp được sử dụng trong bản gốc văn bản, tôi đã sửa chữa một số lỗi trong khi duy trì rõ ràng bối cảnh của bản gốc tài liệu.
http://69.46.26.132/ ~ biggold1/fastget2you/tutorial. php
--- Original Text ----
Tựa
Các bạn đã bao giờ tự hỏi điều gì sẽ xảy ra nếu bạn của bạn bị mất thẻ tín dụng hay thẻ ghi nợ và có người tìm thấy nó. Nên người này có thể rút tiền mặt từ máy ATM đoán, nào đó, PIN của bạn? Hơn nữa, nếu bạn là người tìm thấy một ai đó của thẻ xin bạn hãy thử đoán mã PIN và có cơ hội để dễ dàng nhận được một số tiền? Tất nhiên câu trả lời cho các câu hỏi cần được cả hai "không". Điều này làm việc không đối phó với câu hỏi thứ hai, đó là một vấn đề về đạo đức cá nhân. Ghim theo đây tôi cố gắng trả lời những câu hỏi đầu tiên.
Tất cả các thông tin được sử dụng cho công việc này là công khai và có thể được tự do tìm thấy trong Internet. Phần còn lại là một vấn đề của toán học và lập trình, vì vậy chúng tôi có thể tìm hiểu gì đó và có một số thú vị. Tôi không tiết lộ bí mật. Hơn nữa, mục đích (và cuối cùng kết luận) của công việc này là để chứng minh rằng mã PIN thuật toán vẫn còn đủ mạnh để cung cấp đầy đủ an ninh. Chúng tôi biết tất cả các công nghệ không phải là yếu điểm.
Điều này làm việc phân tích một trong những phổ biến nhất mã PIN thuật toán, VISA PVV, được sử dụng bởi nhiều loại thẻ ATM (thẻ tín dụng và thẻ thanh toán) và cố gắng tìm hiểu cách thức kháng là mã PIN đoán cuộc tấn công. Bởi "đoán" Tôi không có nghĩa là lựa chọn ngẫu nhiên một mã PIN và thử nó trong một máy ATM. Nó cũng được biết, thông thường chúng tôi là đưa ra ba lần liên tiếp thử nghiệm để nhập đúng mã PIN, nếu chúng ta không thành công máy ATM giữ thẻ. Như VISA mã PIN là bốn chữ số dài rất dễ dàng để deduce rằng các cơ hội ngẫu nhiên cho một mã PIN đoán là 3 / 10000 = 0,0003, có vẻ như thấp đủ để được an toàn: nó có nghĩa là bạn cần phải làm mất thẻ tín dụng của bạn nhiều hơn ba nghìn lần ( hay mất đi hơn ba nghìn thẻ cùng một lúc:) cho đến khi có một hợp lý của cơ mất tiền.
Những gì tôi thực sự có nghĩa là của "đoán" là vi phạm các mã PIN thuật toán để đưa ra bất kỳ thẻ, bạn có thể ngay lập tức có liên quan đến mã PIN. Vì vậy tài liệu này có khả năng nghiên cứu, phân tích các thuật toán và đề nghị một phương pháp cho các cuộc tấn công. Cuối cùng, chúng tôi cung cấp một công cụ nào mà thực hiện các cuộc tấn công và hiện tại, và kết quả ước tính về các cơ hội để vi phạm hệ thống. Lưu ý rằng, cũng như lâu dài như các ngân hàng bảo mật liên quan đến các thuật toán (các mã PIN các định dạng như IBM mã PIN hoặc thẻ xác nhận chữ ký như là CVV hoặc CVC) là tương tự như VISA mã PIN, cùng một phân tích có thể được thực hiện yielding gần giống như kết quả và kết luận.
Một trong những phổ biến nhất mã PIN là thuật toán VISA mã PIN xác minh giá trị gia tăng (PVV). Các khách hàng là cho một mã PIN và một magnetic stripe thẻ. Mã hóa trong magnetic stripe là bốn chữ số, được gọi là PVV. Con số này là một cryptographic chữ ký của các mã PIN và các dữ liệu liên quan đến thẻ. Khi người dùng nhập vào mình mã PIN trên máy ATM đọc những magnetic stripe, encrypts và gửi cho tất cả các thông tin này đến một trung tâm máy tính. Có một thử nghiệm PVV được tính bằng cách sử dụng của khách hàng nhập mã PIN và các thông tin thẻ với một cryptographic thuật toán. Phiên tòa PVV là so với các PVV được lưu trữ trong thẻ, nếu họ phù hợp với trung tâm máy tính trả về cho máy ATM cho phép giao dịch. Xem chi tiết hơn.
Bản mô tả của PVV thuật toán có thể được tìm thấy trong hai tài liệu liên kết ở trang trước đó. Trong bản tóm tắt nó bao gồm trong các mật mã của một 8 byte (64 bit) chuỗi dữ liệu, chuyển đổi gọi là an ninh Parameter (TSP), với DES thuật toán (DEA) trong điện tử Mã số Sách của chế độ (ECB) bằng cách sử dụng một chìa khóa bí mật 64-bit. Các PVV là thu được từ các sản phẩm của mật mã quá trình, mà là một chuỗi ký tự 8 byte. Bốn chữ số của PVV (từ trái sang phải) là người đầu tiên tương ứng với bốn chữ số thập phân (từ trái sang phải) của sản lượng từ DES khi coi như là một 16 hexadecimal ký tự (16-bit x 4 = 64-bit) chuỗi. Nếu không có bốn chữ số thập phân trong 16 ký tự hexadecimal thì PVV được hoàn thành thực hiện (từ trái sang phải) và ký tự không phải thập decimalizing chúng bằng cách sử dụng chuyển đổi A-> 0, B-> 1, C-> 2, D -> 3, E-> 4, F-> 5. Dưới đây là một ví dụ:
Kết quả từ DES: 0FAB9CDEFFE7DCBA
PVV: 0975
Các chiến lược tránh decimalization của các ký tự bỏ qua cho đến khi bốn chữ số thập được tìm thấy (trong đó sẽ xảy ra để được gần như tất cả những lần khi chúng tôi sẽ xem dưới đây) là rất thông minh bởi vì nó rất quan trọng tránh thiên vị trong việc phân phối của các chữ số đã được chứng minh là mang lại gây tử vong cho các hệ thống khác, mặc dù những tác động trên hệ thống này sẽ được số tiền thấp hơn. Xem còn là một vấn đề có liên quan không phải nộp đơn xin VISA PVV.
Các TSP, được xem như là một 16 hexadecimal ký tự (64-bit) chuỗi ký tự, được hình thành (từ trái sang phải) với những bìa phải 11 chữ số của PAN (số thẻ) chưa bao gồm các chữ số cuối cùng (số kiểm tra), một trong những chữ số từ 1 đến 6 mà chọn những bí mật encrypting phím và cuối cùng là bốn chữ số của mã PIN. Dưới đây là một ví dụ:
VNM: 1234 5678 9012 3445
Phím chọn: 1
Mã PIN: 2468
TSP: 5678901234412468
Rõ ràng về vấn đề vi phạm VISA mã PIN bao gồm tìm các bí mật encrypting khoá cho DES. Các phương pháp đó là để làm brute một lực lượng tìm kiếm của chính không gian. Lưu ý rằng đây không phải là chỉ có phương pháp, một trong những cố gắng để có thể tìm thấy một suy DEA, đã cố gắng rất nhiều, nhưng theo tiêu chuẩn cũ này vẫn còn trong sử dụng rộng (nay được thay thế bằng AES và RSA, mặc dù). Điều này được minh chứng mạnh mẽ đủ để brute lực lượng là chỉ hữu hiệu đối với phương pháp (có một số cuộc tấn công tốt hơn nhưng không phải thực tế trong trường hợp của chúng tôi, cho thấy một bản tóm tắt LASEC memo và bẩn cho các thông tin chi tiết xem Biham & Shamir năm 1990, Biham & Shamir 1991, Matsui 1993, Biham & Biryukov 1994 và Heys 2001).
Các phím chọn chữ số đã được giới thiệu rất có khả năng bao phủ được khả năng của một phím compromise. Trong trường hợp đó, họ chỉ cần phát hành thẻ mới bằng cách sử dụng phím chọn khác. Cu hơn thẻ có thể được thay thế bằng những cái mới, hoặc đơn giản chỉ các máy ATM có thể transparently viết mới PVV (tương ứng với các khoá mới và giữ cùng một mã PIN) sau thời gian sử dụng cho khách hàng của mình thẻ. Đối với các lắc của an ninh tất cả các người dùng sẽ được yêu cầu thay đổi của họ PINs, tuy nhiên nó có thể lúng túng cho các ngân hàng để giải thích lý do, do đó, rất có khả năng họ sẽ không thực hiện các yêu cầu như vậy.
Chuẩn bị tấn công
Đáp brute vũ lực tấn công bao gồm trong một encrypting TSP với biết PVV có thể sử dụng tất cả các encrypting phím và so sánh từng đạt PVV với những người biết PVV. Khi một kết hợp được tìm thấy là chúng tôi có một ứng cử viên chủ chốt. Nhưng làm thế nào chúng tôi có nhiều phím để thử? Như chúng tôi đã nói ở trên chính là 64-bit dài, điều này sẽ có nghĩa là chúng tôi đã thử 2 ^ 64 chìa khóa. Tuy nhiên điều này là không đúng sự thật. Hiện nay chỉ có 56 bit có hiệu quả trong việc DES phím bởi vì một chút (ít nhất đáng kể trên) ra khỏi lịch sử đã từng octet reserved như một checksum cho những người khác, trong những người thực hành 8 bit (một cho mỗi của 8 octets) được bỏ qua.
Vì vậy các DES phím không gian bao gồm 2 ^ 56 chìa khóa. Nếu chúng tôi thử tất cả các phím này, chúng tôi sẽ tìm thấy một và chỉ một trận đấu, tương ứng với các ngân hàng, bí quyết quan trọng? Chắc chắn không. Chúng tôi sẽ có được nhiều kết hợp phím. Điều này là bởi vì PVV chỉ là một phần nhỏ (một trong những thứ tư) của DES sản lượng. Hơn nữa các PVV là degenerated bởi vì một số các chữ số (những người từ 0 đến 5 sau khi vừa qua, nhìn thấy từ trái sang phải, từ 6 chữ số và 9) có thể đến từ một thập từ một chữ số hoặc chữ số decimalized hexadecimal của DES sản lượng. Vì vậy, nhiều phím sẽ sản xuất một DES sản lượng đó mang lại cho cùng một kết hợp PVV.
Sau đó, những gì chúng tôi có thể làm để tìm được những người thực sự quan trọng giữa các phím tích cực khác sai? Chỉ cần chúng tôi đã để mật mã khác nhau TSP thứ hai, cũng được biết đến với PVV, nhưng chỉ những thí sinh bằng cách sử dụng phím đó đã tích cực kết hợp với đầu tiên TSP-PVV cặp. Tuy nhiên không có gì đảm bảo chúng tôi sẽ không lấy lại nhiều sai tích cực cùng với các phím thật sự. Nếu vậy, chúng tôi sẽ cần có một thứ ba-TSP PVV cặp, lặp lại quá trình, vv.
Trước khi chúng tôi bắt đầu của chúng tôi tấn công, chúng ta phải biết có bao nhiêu TSP-PVV cặp chúng tôi sẽ cần. Cho rằng, chúng ta phải tính toán xác suất cho một ngẫu nhiên DES suất đầu ra để phù hợp với một PVV chỉ của cơ. Có một số cách để tính toán con số này và tại đây, tôi sẽ sử dụng một phương pháp tiếp cận đơn giản, dễ hiểu, nhưng mà đòi hỏi một số nền tảng về toán học của xác suất.
Một xác suất luôn luôn có thể được coi là tỉ lệ thuận lợi cho các trường hợp có thể có trường hợp. Trong vấn đề của chúng tôi có thể có số lượng các trường hợp là do permutation của 16 yếu tố (trên 0 đến F hexadecimal chữ số) trong một nhóm của 16 người trong số họ (trên 16 chữ số hexadecimal của DES sản lượng). Điều này là do 16 ^ 16 ~ 1,8 * 10 ^ 19 trong đó tất nhiên là trùng với 2 ^ 64 (số điện thoại khác nhau của 64 bit). Điều này thiết lập các số điện thoại có thể được chia thành năm loại:
Những người có ít nhất là bốn chữ số thập phân (0 đến 9) trong 16 hexadecimal chữ số (0 to F) của DES sản lượng.
Những người có chính xác chỉ có ba chữ số thập phân.
Những người có chính xác chỉ có hai chữ số thập phân.
Những người có chính xác chỉ có một chữ số thập phân.
Những người không có chữ số thập phân (tất cả giữa A và F).
Hãy tính toán có bao nhiêu con số nằm trong mỗi thể loại. Nếu chúng tôi các nhãn 16 chữ số hexadecimal của DES sản lượng như X1 vào x16 sau đó chúng tôi có thể gắn nhãn là người đầu tiên bốn chữ số thập phân của bất cứ số lượng các danh mục đầu tiên là Xi, Xj, XK và Xl. Số lượng các kết hợp khác nhau với các hồ sơ này được dành cho các sản phẩm của 6 i-1 * 10 * 6j-i-1 * 10 * 6k-j-1 * 10 * 6 LK-1 * 10 * 1616-l, nơi 6 ' s đến từ số lượng các khả năng cho một A đến F chữ số, trong 10 người đến từ các khả năng cho một chữ số 0 đến 9, và 16 đến từ các khả năng cho một chữ số 0 đến F. Bây giờ trong tổng số điện thoại đầu tiên trong thể loại đơn giản chỉ là do summation của sản phẩm này trên i, j, k, l từ 1 đến 16, nhưng với i <j <k <l. Nếu bạn làm một số việc làm toán, bạn sẽ nhìn thấy bằng này đến sản phẩm của 104 / 6 với các summation qua tôi từ 4 đến 16 / (i-1) * (i-2) * (i-3) * 6i-4 * 16 16-i ~ 1,8 * 1019.
Analogously số trường hợp trong loại thứ hai là do summation trên i, j, k từ 1 đến 16 với i <j <k sản phẩm 6i-1 * 10 * 6j-i-1 * 10 * 6k-j -1 * 10 * 616-k mà bạn có thể làm việc nó ra để được 16! / (3! * (16-13)!) * 103 * 6 13 = 16 * 15 * 14 / (3 * 2) * 103 * 613 = 56 * 104 * 613 ~ 7,3 * 1015. Tương tự cho loại thứ ba, chúng tôi có hơn summation i, j từ 1 đến 16 với i <j của 6 i-1 * 10 * 6j-i-1 * 10 * 616-j mà bằng đến 16! / (2! * (16-14)!) * 102 * 614 = 2 * 103 * 615 ~ 9,4 * 1014. Một lần nữa, đối với loại thứ tư của chúng tôi có hơn summation i từ 1 đến 16 của 6i-1 * 10 * 616-i = 160 * 615 ~ 7,5 * 1013. Và cuối cùng là số tiền trong trường hợp thứ năm được dành cho thể loại của permutation sáu yếu tố (A đến F chữ số) trong một nhóm của 16, có nghĩa là, 616 ~ 2,8 * 1012.
Tôi hy vọng quý vị theo tính toán đến thời điểm này, các phần cứng được thực hiện. Bây giờ là một bằng chứng rằng tất cả mọi thứ là đúng, bạn có thể tổng số các trường hợp mắc bệnh trong 5 loại và xem nó bằng tổng số các trường hợp, chúng tôi có thể tính toán trước. Do các hoạt động bằng cách sử dụng 64-bit số điện thoại hoặc tròn (cho floats) hoặc tràn (cho integers) lỗi sẽ không cho phép bạn nhận được kết quả chính xác.
Đến nay chúng tôi đã tính toán số lượng các trường hợp có thể có trong mỗi năm của các chuyên mục, nhưng chúng tôi đang quan tâm đến việc nhận được số lượng các trường hợp thuận lợi để thay thế. Điều này là hết sức dễ dàng lấy được Sau đó kể từ khi cựu fixing này chỉ là sự kết hợp của bốn chữ số thập phân (hoặc theo yêu cầu chữ số hexadecimal nếu không có bốn chữ số thập phân) của PVV thay vì cho phép chúng miễn phí. Trong thực hành này có nghĩa là số 10 của người lao động trong các công thức trên vào 1 và được yêu cầu số tiền của 6 người vào 1 của nếu không có bốn chữ số thập phân. Tức là, chúng tôi đã chia kết quả đầu tiên của 104, điều thứ hai của 103 * 6, thứ ba của một trong 102 * 62, thứ tư của một trong 10 * 63 và thứ năm của một trong 64. Sau đó, số lượng các trường hợp, thuận lợi trong năm chuyên mục được khoảng 1,8 * 1015, 1.2 * 1012, 2,6 * 1011, 3,5 * 1010, 2,2 * 109 tương ứng.
Bây giờ chúng tôi có thể để có được những gì là xác suất cho một DES đầu ra để phù hợp với một PVV của cơ. Chúng tôi chỉ cần thêm các số điện thoại của năm trường hợp, thuận lợi và chia cho tổng số các trường hợp có thể có. Làm điều này, chúng tôi có được là xác suất là rất hay một trong khoảng 0,0001 ra mười nghìn. Nó là lạ này cũng làm tròn kết quả? Không phải ở tất cả các, chỉ cần có một nhìn vào những con số mà chúng tôi tính toán ở trên. Đầu tiên thể loại chi phối bởi một số đơn đặt hàng của magnitude số thuận lợi và có thể có trường hợp. Điều này là khá trực quan như nó có vẻ rõ ràng rằng nó là rất khó không có bốn chữ số thập phân (10 cơ ra là 16 cho mỗi chữ số) trong số 16 chữ số hexadecimal. Chúng tôi đã thấy trước đó rằng các mối quan hệ giữa số lượng và thuận lợi cho các trường hợp có thể có trong các danh mục đầu tiên là một bộ phận của 10 ^ 4, đó là nơi mà kết quả của chúng tôi p = 0,0001 đến từ.
Mục tiêu của chúng tôi cho tất cả các phép tính đã được làm thế nào để tìm hiểu nhiều TSP-PVV đôi chúng ta cần phải mang theo một thành công brute vũ lực tấn công. Bây giờ chúng tôi có thể tính toán ra những sai số trong một tích cực tìm kiếm đầu tiên: nó sẽ được cho số lần thử nghiệm các xác suất cho một ngẫu nhiên sai tích cực, có nghĩa là t * p mà t = 2 ^ 56, kích cỡ của chìa khóa không gian. Số tiền này vào khoảng 7,2 * 10 ^ 12, một số khá lớn. Ra những sai số tích cực trong việc tìm kiếm thứ hai (bị giới hạn để tích cực tìm thấy chìa khóa trong tìm kiếm đầu tiên) sẽ được (t * p) * p, cho một bên thứ ba sẽ được tìm kiếm ((t * p) * p) * p và vv. Vì vậy, cho n tìm kiếm ra những sai số lượng tích cực sẽ được t * p ^ n.
Chúng tôi có thể có được số lượng các yêu cầu để tìm kiếm mong đợi chỉ là một sai ý tích cực của phương trình t * p ^ n = 1 và giải quyết cho n. Vì vậy, n bằng cho logarithm trong cơ sở p 1 / t, mà do tài sản của nó mang lại logarithms đăng nhập n = (1 / t) / log (p) ~ 4,2. Vì chúng tôi không thể làm một fractional tìm kiếm đó là thuận lợi để bao chung quanh con số này. Vì vậy những gì được ra những sai số tích cực, nếu chúng ta thực hiện năm tìm kiếm? Đó là t * p ^ 5 ~ 0,0007 hay khoảng 1 trên 1400. Do đó, bằng cách sử dụng năm TSP-PVV cặp an toàn để có được thật sự bí mật mà không có chìa khóa giả tích cực.
Các cuộc tấn công
Sau khi chúng tôi biết chúng tôi cần năm TSP-PVV cặp, làm thế nào để chúng tôi nhận được chúng? Tất nhiên chúng tôi cần ít nhất một thẻ với người biết mã PIN, và do tính chất của PVV thuật toán, đó là điều duy nhất mà chúng tôi cần. Với các mã PIN hệ thống riêng, như IBM, chúng tôi cần phải xin thẻ năm, tuy nhiên điều này là không cần thiết với VISA PVV thuật toán. Chúng tôi chỉ cần có để đọc magnetic stripe và sau đó thay đổi mã PIN bốn lần, nhưng đọc thẻ sau mỗi lần thay đổi.
Nó là cần thiết để đọc magnetic stripe của thẻ, để lấy các PVV và encrypting phím chọn. Bạn có thể mua một thương mại magnetic stripe đọc hoặc thực hiện một mình làm theo các hướng dẫn bạn có thể tìm thấy trong các trang trước và liên kết trong đó. Một khi bạn có một người đọc thấy tiêu chuẩn này mô tả của magnetic theo dõi để tìm hiểu làm thế nào để có được sự PVV từ các dữ liệu đọc. Trong tài liệu đó các PVV trong lĩnh vực theo dõi 1 và 2 được gọi là tính lâu năm, nhưng thực sự thật sự PVV bao gồm bốn chữ số cuối cùng. Đầu tiên của năm chữ số là các phím chọn. Tôi chỉ có thẻ nhìn thấy với một giá trị là 1 trong số này, mà là phù hợp với tiêu chuẩn và với những bí mật không bao giờ được công chính (và do đó họ không cần phải di chuyển đến một phím thay đổi chọn).
Tôi đã làm một chương trình đơn giản, C, getpvvkey.c, để thực hiện các cuộc tấn công. Nó bao gồm một vòng lặp để có thể thử tất cả các chìa khóa để mật mã đầu tiên TSP, nếu thu được PVV khớp với đúng PVV mới TSP là thử, và như vậy về cho đến khi có một mismatch, trong đó có trường hợp quan trọng là bỏ đi và một hình mới là cố gắng, hay là năm bắt nguồn PVVs phù hợp với thực PVVs tương ứng, trong đó có trường hợp chúng tôi có thể giả định rằng chúng tôi đã cho ngân hàng, bí quyết quan trọng, tuy nhiên trong vòng lặp đi trên cho tới khi nó exhausts phím không gian. Điều này được thực hiện để bảo đảm chúng tôi thấy thật sự quan trọng bởi vì đó là một cơ hội (mặc dù rất thấp) là người đầu tiên được tìm thấy chính là một sai tích cực.
Đây là dự kiến chương trình sẽ mất một thời gian rất dài để kết thúc và để giảm thiểu rủi ro của một quyền lực cắt, máy tính hang out, etc checkpoints hiện nó vào tập tin getpvvkey.dat theo thời gian (chính xác thời gian phụ thuộc vào tốc độ của máy tính, nó khoảng một giờ cho các máy tính nhanh nhất hiện nay sử dụng). Cũng tương tự như vậy, nếu tích cực là chìa khóa được tìm thấy nó được ghi vào tập tin getpvvkey.key. Chương trình chỉ hiển thị một trong những bài viết ở đầu, các vị trí bắt đầu lấy từ checkpoint tập tin nếu có, sau đó không có gì hơn được hiển thị.
Các DES thuật toán là một điểm quan trọng trong chương trình, nó là do đó rất quan trọng để tối ưu hóa tốc độ của nó. Tôi kiểm tra một số triển khai: libdes, SSLeay, openssl, cryptlib, nss, libgcrypt, catacomb, libtomcrypt, cryptopp, UFC-crypt. Các DES chức năng của bốn lần đầu tiên được dựa trên cùng một mã số của Eric Young và là một trong những nơi thực hiện hay nhất (bao gồm tối ưu hoá C và x86, assembler mã). Vì vậy, tôi đã chọn libdes mà ban đầu đã được thực hiện và có liên quan condensed tất cả các mã trong các tập tin encrypt.c (C phiên bản) và x86encrypt.s (x86, assembler phiên bản). Các mã được chút sửa đổi để đạt được một số cải tiến trong một brute vũ lực tấn công: ban đầu permutation là một cố định thông thường trong mỗi steep TSP mật mã và do đó có thể được thực hiện chỉ một lần vào đầu. Một là cải tiến mà tôi đã viết một chức năng hoàn toàn mới setkey (tôi gọi nó nextkey) là tối ưu cho một lực lượng brute loop.
Để có được chương trình làm việc bạn chỉ cần gõ địa điểm tương ứng năm TSPs và các PVVs và sau đó biên dịch nó. Tôi đã thử nghiệm nó chỉ có trong hệ điều hành UNIX, bằng cách sử dụng makefile Makegetpvvkey để biên dịch (sử dụng lệnh "make-f Makegetpvvkey"). Nó có thể biên dịch trên các hệ thống khác, nhưng bạn có thể cần phải sửa chữa một số điều. Hãy chắc chắn rằng các định nghĩa của các loại long64 tương đương với một số nguyên 64-bit. Về nguyên tắc không có dependence trên endianness của các bộ xử lý. Tôi đã biên soạn thành công và chạy nó trên Pentium-Linux, Alpha-kiểu Tru64, MIPS-Irix và Sparc-Solaris. Nếu bạn không có và không muốn cài đặt Linux (bạn không biết những gì bạn đang thiếu ;-) bạn vẫn có được sự lựa chọn để chạy Linux trên đĩa CD và sử dụng các chương trình của tôi, xem trang web của tôi đang chạy Linux, không cần cài đặt nó.
Một khi bạn đã được tìm thấy những bí mật của ngân hàng quan trọng nếu bạn muốn tìm thấy mã PIN của một arbitrary thẻ bạn chỉ cần viết một chương trình tương tự (xin lỗi tôi đã không viết nó, I'm too lazy:) mà có thể thử tất cả 10 ^ 4 PINs bằng cách tạo ra tương ứng TSP, encrypting với nó (không còn), bí quyết quan trọng, deriving các PVV và so sánh nó với các PVV trong magnetic stripe của thẻ. Bạn sẽ nhận được một trận đấu cho đúng mã PIN. Chỉ có một trận đấu? Hãy nhớ rằng những gì chúng ta đã thấy ở trên, chúng tôi có một cơ hội của 0,0001 là một ngẫu nhiên mật mã phù hợp với PVV. Chúng tôi đang cố gắng 10000 PINs (và do đó TSPs) như vậy, chúng tôi hy vọng 10000 * 0,0001 = 1 sai tích cực trên mức trung bình.
Đây là một kết quả rất thú vị, nó có nghĩa là, trung bình, mỗi thẻ có hai PINs hợp lệ: các mã PIN Khách hàng và dự kiến sai tích cực. Tôi gọi nó là "giả", nhưng lưu ý rằng, cũng như lâu dài vì nó tạo ra thật sự PVV đó là một mã PIN như là hợp lệ của khách hàng một. Hơn nữa, không có cách nào để biết được đó, ngay cả đối với các máy ATM, chỉ có khách hàng biết. Ngay cả khi các sai tích cực như không hợp lệ đã được mã PIN, bạn vẫn còn có ba thử nghiệm tại các máy ATM anyway, đủ trên mức trung bình. Vì vậy các xác suất, chúng tôi tính toán ban đầu của tài liệu này về ngẫu nhiên đoán của các mã PIN đã được sửa chữa. Hiện nay nó được hai lần mà giá trị, nghĩa là, nó là một trong những 0,0006 hoặc ra hơn 1600, vẫn an toàn ở mức thấp.
Kết quả
Điều quan trọng là để tối ưu hóa việc biên soạn của chương trình và chạy nó trong việc xử lý nhanh nhất có thể do sự mong đợi lâu dài thời gian chạy. Tôi thấy rằng các compiler tối ưu hóa cờ-O được tốt hơn các hiệu quả hoạt động, tư tưởng là đạt được một số cải tiến thêm-fomit-frame-pointer cờ trên Pentium-Linux, thì spike-cờ trên Alpha-kiểu Tru64, các IPA-cờ trên MIPS-Irix và nhanh cờ trên Sparc-Solaris. Đặc biệt cờ (-DDES_PTR-DDES_RISC1-DDES_RISC2-DDES_UNROLL-DASM) cho DES mã có nói chung cũng như lợi ích. Tất cả các cờ này đã được thử nghiệm và tôi đã lựa chọn kết hợp tốt nhất cho mỗi bộ xử lý (xem makefile) nhưng bạn có thể thử sử dụng tốt để điều chỉnh khác cờ.
Theo các xét nghiệm tốt nhất của tôi là đạt được hiệu suất với các bộ xử lý AMD Athlon 1600 MHz xử lý, vượt quá 3,4 triệu đồng cho mỗi cái chìa khóa thứ hai. Điều thú vị này được kết quả tốt hơn Intel Pentium IV 1800 MHz và 2000 MHz (xem số liệu dưới đây, hãy nhấp vào đó để phóng to). Tôi tin rằng đây là do một số I / O bão hòa, chắc chắn bộ nhớ cache hay bộ nhớ truy cập, mà các bộ xử lý AMD bộ xử lý (trong đó có một nửa bộ nhớ cache của Pentium) hay bo mạch chủ, trong đó nó được hoạt động, quản lý để tránh. Trong những con số đầu tiên bên dưới, bạn có thể thấy rằng các DES vi phạm tốc độ của tất cả các bộ xử lý đã có nhiều hơn hoặc ít hơn một mối quan hệ tuyến với tốc độ xử lý, ngoại trừ hai Intel Pentium tôi đã đề cập trước đây. Điều này là hợp lý, nó có nghĩa là cho một đôi tốc độ xử lý bạn sẽ nhận được gấp đôi tốc độ vi phạm, nhưng xem ra hiệu ứng cho bão hòa, trong trường hợp này là tốt hơn các bộ xử lý AMD Athlon 1600 MHz, mà sẽ được thậm chí rẻ hơn so với Intel Pentium 1800 MHz hoặc 2000 MHz.
Trong phần thứ hai con số, chúng tôi có thể xem chi tiết hơn những gì mà chúng tôi xin gọi intrinsic DES break sức mạnh của bộ xử lý. Tôi nhận được giá trị này chỉ đơn giản chia các vi phạm tốc độ của các bộ xử lý tốc độ, có nghĩa là, chúng tôi nhận được số lượng DES phím thử cho mỗi thứ hai và mỗi MHz. Đây là một thước đo hiệu suất xử lý của các loại hình độc lập của nó, tốc độ. Các kết quả cho thấy rằng các bộ xử lý tốt nhất cho nhiệm vụ này là bộ xử lý AMD Athlon, sau đó đến Alpha và rất gần sau khi được những Intel Pentium (trừ việc cao hơn tốc độ mà những người thân thực hiện rất nghèo do sự bão hòa có hiệu lực). Tiếp theo là bộ xử lý MIPS và cuối cùng là nơi Sparc. Một số Alpha và bộ xử lý MIPS được đặt ở dưới cùng của quy mô, vì họ được sớm phát hành không bao gồm các tính năng nâng cao của các phiên bản cuối. Lưu ý rằng tôi có hiệu suất của các bộ xử lý cho x86, C và assembler mã như có một sự khác biệt. Nó dường như gcc không phải là một máy phát điện của máy tính tối ưu mã, nhưng dĩ nhiên chúng tôi không biết tự tối ưu hóa của assembler mã khác cho các bộ xử lý (Alpha, MIPS, Sparc) sẽ cho kết quả của họ tăng so với bản C compilers (Tôi đã không sử dụng gcc cho các các hệ điều hành khác) như điều đó xảy ra với bộ xử lý x86.
Cập nhật
Đây là một bài báo, nơi các kỹ thuật này có thể đã được sử dụng.




























