GIỚI THIỆU THUẬT TOÁN MÃ HÓA CỦA RSA SECURID

Một phần của tài liệu Nghiên cứu xây dựng hệ thống đảm bảo an toàn truyền tin trên mạng Vinaphone (Trang 54)

2.5.1. Giới thiệu

Tokencode RSA SecurID hiện nay là dựa trên một thuật toán thuộc quyền sở hữu riêng và cung cấp một tokencode 6 đến 8 chữ số giống nhƣ một đầu ra của thuật toán. Đầu ra này là một mã mới, không thể dự đoán đƣợc, đƣợc hiển thị sau một khoảng thời gian là 30 hoặc 60 giây.

Thuật toán ban đầu đƣợc thiết kế và sử dụng trên một bộ vi điều khiển 64 bit do khách hàng đặt làm với một tốc độ hoạt động ít hơn 1 megahertz. Dựa vào khả năng hoạt động và tính toán này, việc sử dụng một giá trị thời gian 64 bit và thành phần bí mật 64 bit trong thuật toán huỷ là những lựa chọn đáp ứng cho việc xác thực qua các kênh không bị pha tạp.

Nếu các mã đƣợc đƣa ra qua một phƣơng tiện trung gian mà có thể đƣợc điều khiển bởi một kẻ tấn công hoặc đƣợc quan sát trên một thiết bị mã thông bao đã đƣợc làm tạm thời, việc thi hành SecurID dễ bị tấn công nếu tồn tại một tấn công để đƣa ra thành phần bí mật bằng cách quan sát các tokencode đã đƣợc tạo ra trƣớc đó hoặc các tokencode liên tiếp.

Ngoài ra, với giá trị tới hạn của các tokencode mềm đang tồn tại trên các hệ thống hoạt động phổ biến và không phụ thuộc vào phần cứng đặc biệt nào, mức độ lỗ lực cần thiết để tìm ra thuật toán và thành phần bí mật đã đƣợc giảm đáng kể. Nếu thuật toán có thể đảo đƣợc hoặc các thành phần khởi tạo của thuật toán là có thể suy diễn thì rủi ro là các thẻ bị bắt chƣớc hoặc việc tiên đoán ra giá trị các tokencode sau này là dễ dàng có thực.

Độ đo độ an toàn trở nên rất dễ dàng: đảm bảo tính toàn vẹn và việc điều khiển của các thiết bị tokencode phần cứng cũng nhƣ phần mềm, xác thực thông qua các kênh giao tiếp đã đƣợc mã hoá và đảm bảo cuối mỗi kênh giao tiếp bằng máy chủ ứng dụng tới máy chủ xác thực ACE là không đƣợc thực hiện qua các đƣờng truyền công cộng.

2.5.2. Các vấn đề liên quan đến thuật toán

Các mã thẻ đƣợc tạo ra bằng thuật toán xuất phát từ hai giá trị bên trong: giá trị thời gian 64 bit và một giá trị bí mật 64 bit.

Kết quả của thuật toán sau đó đƣợc đƣa qua một thủ tục làm biến đổi cuối cùng làm cho nó trở nên khó hiểu hơn là đầu ra thực của thuật toán và đƣa ra một giá trị phù hợp hiển thị tokencode dựa trên phần cứng hoặc phần mềm.

Hình 2.11. Thủ tục tạo tokencode

Giá trị đƣa ra bằng thủ tục biến đổi độ dài 64 bit và chia thành nhiều tokencode phụ thuộc vào thiết bị tạo tokencode và khoảng thời gian hiển thị.

2.5.1.1. Giá trị thời gian (Time)

Biến số đặt vào trong thuật toán SecurID biểu diễn thời gian hiện tại của thuật toán là giá trị 64 bit. Tuy nhiên, quá trình kiểm tra đã chỉ ra rằng giá trị 64 bit này là đƣợc tạo ra từ biểu diễn 32 bit của thời gian hiện tại (GMT) tính theo các giây từ 12 giờ đêm ngày 01/01/1986.

Trong hàm làm tròn, giá trị đƣợc dịch trái hai lần là tƣơng đƣơng với phép nhân 4. Hàm này đảm bảo đƣợc giá trị của kết quả đầu ra luôn luôn là chẵn theo tính chất kết hợp của phép nhân. Do đó, hai bit có trọng số thấp nhất sẽ luôn luôn là 00 và các giá trị có thể của mỗi trọng số thấp nhất là 0x0, 0x4, 0x8 và 0xC. Phép nhân này sẽ xóa nhiều hơn hai bit của entropy từ giá trị thời gian 24 bit lên tới tổng giá trị thời gian có thể là 222 hay 4,194,304. Tổng giá trị thời gian này có thể giảm một cách đáng kể nếu giả thiết kẻ tấn công biết đƣợc giá trị thời gian xấp xỉ đã đƣợc tạo trƣớc đó.

Kết quả của khoảng thời gian đã đƣợc biến đổi này có khả năng tạo ra một chu kỳ tokencode hoàn chỉnh bằng cách tăng thông qua tất cả các giá trị thời gian có thể đối với một giá trị bí mật đơn lẻ. Chu kỳ hoàn chỉnh có chứa tổng 4,194,304 đầu ra 64-bit có thể từ thuật toán SecurID.

Thuật toán Convert

Giá trị trước khi convert

Giá trị tokencode 64 bít time

Giai đoạn của chu kỳ đƣợc thiết kế dài hơn thời gian sống của thiết bị chứa mã thông báo, nếu thiết bị chạy trong thời gian thực (trong trƣờng hợp một độ dài của tokencode 8-bit đƣợc sử dụng với chu kỳ hiển thị là 60 giây, nó sẽ mất gần 16 năm để lặp qua tất cả các giá trị tokencode có thể). Tuy nhiên, việc sử dụng một thiết bị tokencode mềm đã đƣợc sửa đổi , thời gian có thể tăng lên với một tốc độ lớn hơn, do đó việc đƣa ra toàn bộ chu kỳ tokencode chỉ là vấn đề bao nhiêu phút.

2.5.1.2. Giá trị bí mật (Secret)

RSA đã tiết lộ cách thức họ tạo ra các mã bí mật 64-bit ban đầu mà đƣợc sử dụng giống nhƣ các giá trị đầu vào bên trong thuật toán của họ. Những giá trị này đƣợc quy định trƣớc, giả thiết ngay cả nếu cơ chế tạo ra có thể đoán đƣợc, nó có thể đƣợc thay đổi một cách trong suốt tới một lƣợc đồ tạo ngẫu nhiên hơn. Tuy nhiên, thậm chí với cách tạo số giả ngẫu nhiên hoặc ngẫu nhiên mạnh của mã bí mật, số lƣợng giới hạn các giá trị có thể đƣợc coi là không thích hợp trong một vài trƣờng hợp nào đó.

Sẽ có thành phần bí mật đƣợc xem là thoả hiệp từ các thẻ cứng hoặc các ứng dụng thực thi thẻ mềm, tất cả các giá trị đầu ra có thể đƣợc quay vòng qua và đƣợc ghi lại bằng ccsh sử dụng thuật toán SecurID. Điều này có thể thực hiện mà không giả mạo bằng thiết bị lƣu tokencode giả mạo, do đó việc tấn công sẽ không đƣợc phát hiện tức thì.

2.5.1.3. Giá trị biến đổi (Convert)

Giá trị tokencode có thể đƣợc nhập vào bởi ngƣời sử dụng đƣợc hiển thị trong chuỗi nhị phân từ 6 đến 8 bit. Giá trị nhị phân này xuất phát từ giá trị hexa 64-bit, đƣợc gọi là ―giá trị trƣớc khi biến đổi‖ bằng cách sử dụng một thủ tục biến đổi đơn giản nhƣ sau:

For each nibble in the hexadecima pre-convert value { if (nibble > 9) { nibble = nibble - 2; nibble = nibble - {0, 2, 4, 6, 8}; nibble = nibble %10;}}

Với mỗi nibble trong giá trị trƣớc biến đổi, nếu nibble lớn hơn 9 thì phép biến đổi đƣợc sử dụng. Ngƣợc lại, nếu nibble nhỏ hơn hoặc bằng 9, số tự nhiên đƣợc hiển thị. Từ đây, giá trị chỉ ra cho ngƣời dùng có thể chỉ ra giống nhƣ trong bảng dƣới đây: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 A B A B A B A B A B C D C D C D C D C D E F E F E F E F E F

Bảng 2.1. Bảng các giá trị của tokencode

Theo tƣ tƣởng thiết kế, giá trị nhóm 6 từ 0xA đến 0xF có khả năng đƣợc ánh xạ tới giá trị thập phân từ 0 đến 9. Tuy nhiên, do 0xA, 0xC và 0xE chỉ có thể đƣợc ánh xạ sang 0, 2, 4, 6 hay 8 và 0xB, 0xD và 0xF chỉ có thể đƣợc ánh xạ tới 1, 3, 5, 7 hoặc 9, số lƣợng các giá trị trƣớc biến đổi có thể đƣợc giảm một cách đáng kể.

Gọi tlen là độ dài của mã thông báo, với mỗi giá trị tokencode bất kỳ đƣợc đƣa ra, thủ tục biến đổi chỉ cung cấp 4tlen các giá trị trƣớc biến đổi có thể, các giá trị này sau đó có thể đƣợc phân tích để quyết định các cấu hình bit riêng biệt của giá trị bí mật thực sự.

Thiết kế lý tƣởng nếu đƣa ra 7tlen giá trị trƣớc biến đổi có thể. Ví dụ, một tokencode 6 ký tự đặc biệt, có 46 hay 4096 giá trị trƣớc biến đổi có thể đƣợc tạo ra. Trƣờng hợp lý tƣởng sẽ đƣa ra 76 hay 117,649 các giá trị trƣớc biến đổi có thể.

Với mỗi giá trị của tokencode đƣợc hiển thị thực sự thì có một khả năng là 62,5% số là số tự nhiên (ví dụ, một số 0 đƣợc hiển thị có một giá trị 0 trƣớc biến đổi), còn lại 12,5% khả năng số là {A, C, E} hoặc {B, D, F}. (adsbygoogle = window.adsbygoogle || []).push({});

2.5.1.4. Các xung đột trong chu kỳ của tokencode

Việc phân tích các chu kỳ tokencode cho một ví dụ về các secret 64 bit đƣợc tạo ra một cách giả ngẫu nhiên mang lại các kết quả thú vị. Ngoài 8,388,608 tokencode có khả năng (hai tokencode đƣợc đƣa ra cho mỗi giá trị thời gian), xấp xỉ 8 triệu tokencode là duy nhất và chỉ xuất hiện một lần trên một chu kỳ. Còn lại gần 300,000 là các giá trị lặp lại hoặc bị xung đột.

Do đó, 4% chu kỳ tokencode có các giá trị lặp. Đây là một phần giá trị đƣợc tạo ra do vòng convert. [4]

2.6. CÁC ĐIỂM YẾU TRONG RSA SECURID 2.6.1. Giới thiệu 2.6.1. Giới thiệu

Hệ thống SecurID là một dạng phổ biến của 2 nhân tố xác thực liên quan đến thẻ cầm tay phân phát cho ngƣời dùng, phần mềm client cho một loạt các hệ thống, và phần mềm máy chủ cho việc quản lý và xác thực tập trung.

Chiếc thẻ này chứa một bộ vi xử lý 8 bít, một đồng hồ, một màn hình LCD, một cục pin, và có thể là một bàn phím cảm ứng. Đơn vị này đƣợc đặt trong một bộ chống giả mạo bằng thép, và đƣợc thiết kế để xoá bộ nhớ nếu bị mở ra.

Thẻ sẽ phát sinh một chuỗi cố định các con số có vẻ không liên quan đến nhau (có thể coi nhƣ là các mã thẻ) bằng cách kết nối một số seed đã đƣợc lập trình sẵn với thời gian , và thực thi chúng thông qua cái mà thƣờng đƣợc coi là hàm băm SecurID.

Security Dynamic thƣờng có 2 hàm băm, hàm băm cho thẻ và hàm băm gọi là F2. Hãy quan sát thông tin phía dƣới về chi tiết của F2. Độ dài của các mã thẻ có thể từ 6-8 chữ số, và sẽ không thay đổi đối với một thẻ cho trƣớc. Nếu thẻ này có một bộ phím nó có thể kết nối một PIN (của 4-8 chữ số, có thể cấu hình bởi ngƣời quản trị - administrator) với đầu ra của bảng bấm. PIN này đƣợc đƣa vào đầu ra của hàm băm không cần hỗ trợ bổ sung nào.

Phần mềm máy khách bao gồm sửa đổi tới một hệ thống kiểm định của một máy chủ, nhờ vậy nó có thể giao tiếp với máy chủ ACE. Phần mềm này sẵn có đối với một loạt các hệ thống, từ AppleTalk Remote Access tới bộ định tuyến Cisco, các máy chủ Annex Terminal, và các máy trạm UNIX.

Chúng ta sẽ tập trung vào trƣờng hợp một máy trạm UNIX chạy chƣơng trình Security Dynamics1 sdshell. Chƣơng trình này sẽ đƣợc ấn định là user1s shell. Một khi ngƣời dùng đã đƣợc xác thực tới /bin/login, họ sẽ đƣợc cho vào tới sdshell, giao tiếp với máy chủ ACE để thu về thông tin kiểm định đối với ngƣời dùng đó.

Mặc dù các vụ tấn công đƣợc mô tả ở đây tập trung vào cài đặt sdshell, nhƣng ảnh hƣởng đến tất cả thiết lập của giao thức. Và cũng có một máy khách cho phép SecurID đƣợc tích hợp vào trong một sản phẩm mới trên một nền hệ thống đƣợc hỗ trợ mà không cần can thiệp nhiều từ Security Dynamic .

Máy chủ bao gồm một deamon, một cơ sở dữ liệu, và một phần mềm để quản trị cả 2. Máy chủ có thể chạy trên một loạt các nền hệ thống, và có thể hỗ trợ cho việc hoạt động đối với TCP/IP, Novell 3.11 và 3.12, và AppleTalk. Việc tham định cũng có thể đƣợc thi hành thông qua TACACS, XTACACS, và TACACS+.

Chúng ta sẽ tập trung vào việc cài đặt TCP/IP, đƣợc sử dụng ở hầu hết các hệ thống có kết nối internet. Giao thức là stateless, và chạy trên UDP. Deamon lắng nghe tín hiệu từ UDP cổng 124 theo mặc định.

Cơ sở dữ liệu trong phiên bản 1.2.4 là một cơ sở dữ liệu phẳng độc quyền, và đƣợc thay thế trong phiên bản 2 bởi một Progress DBMS. Cơ sở dữ liệu vào các file log chƣa mã hoá DES, và chỉ có thể đƣợc thao tác bởi chƣơng trình sdadmin, hoặc đƣợc đọc bởi sdlogmon. Cơ sở dữ liệu sẽ chứa thông tin cho một thẻ: xác định thời gian hết hạn, lần cuối đăng nhập thành công (theo lý thuyết), lần cuối thâm nhập, pin, ƣớc lƣợng về độ lệch đồng hồ và seed. Nó có thể cũng chứa thông tin về các nhóm ngƣời dùng, nhóm các máy, và những nhóm hoặc ngƣời dùng đƣợc cho phép đăng nhập tới mỗi máy hoặc nhóm các máy đó.

Hệ thống sẽ hỗ trợ 2 máy chủ, 1 master và một slave. Chúng ta sẽ không khảo sát tƣơng tác giữa chúng, và sẽ chỉ xem xét trƣờng hợp một single master, bởi vì thực tế sự tấn công đƣợc mô tả ở đây không bị ảnh hƣởng bởi liên kết master-slave.

2.6.2. Giao thức Ace

Trong phần này sẽ khảo sát giao thức đƣợc thiết lập trong phiên bản 1.2.4 của phần mềm. Mục đích của giao thức Ace là cho phép cơ sở dữ liệu các seed và thuật toán thẻ (card algorithm) cùng tồn tại trong một máy trung tâm có thể đƣợc bảo vệ tốt. Giao thức mà xác nhận, đƣa ra ―4 mức thành công của mã hoá chéo‖ và ―sự xác thực qua lại‖ giữa máy chủ và máy khách . Việc yêu cầu về sự xác thực qua lại sẽ đƣợc chỉ dẫn là thất bại.

Các thuật ngữ liên quan đến giao thức:

c : Là 1 khoá DES đƣợc phát sinh trƣớc đó bởi máy khách và gửi tới máy chủ. Ek(văn bản gốc - plaintext): Tham chiếu tới mã hoá DES của văn bản gốc với khoá K. Giao thức đó sẽ không sử dụng 1 IV, và chỉ mã hoá các khối đơn lẻ trong ECB mode.

IP: Là địa chỉ IP của máy khách ACE.

P: Là passcode mà ngƣời dùng muốn đƣợc xác thực.

: Là mã truyền mà một thẻ riêng + pin để đƣa ra các passcode +1, -1, là các passcode mong muốn nếu đồng hồ thẻ bị lệch 1 số lƣợng lên hoặc xuống.

T: Là 1 nhãn thời gian (timestamp).

F2: Là 1 hàm băm đƣợc phát triển bởi Security Dynamic. Đối với một giao thức hoạt động nhƣ đã thiết kế, nó phải là không thể bị đảo ngƣợc (tính toán đầu vào từ đầu ra) và có khả năng chống lại sự xung đột (không thể tìm thấy 2 đầu vào mà sinh ra cùng một kết quả). Nếu nhƣ nó có thể dẽ dàng bị hoán đổi thì 1 số seed của thẻ có thể sẽ bị kẻ tấn công phát Nó cần có khả năng chống lại sự tấn công bởi vì máy chủ đòi hỏi sẽ không chấp nhận các tokencode đã từng đƣợc sử dụng rồi. F2 sinh ra 256 bit đầu ra từ đầu vào của nó. F2 có thể đƣợc dẫn xuất từ việc kiểm tra chƣơng trình ‗sdshell‘ có sẵn trong máy tính.

WP: Tham chiếu tới ―Worktation Passcode‖, nó là 64 bit của 256 bit đầu ra của F2. WP[1] tham chiếu đến 64 bit đầu tiên.

Giao thức sẽ bắt đầu khi ngƣời dùng tác động lên một vài quá trình (đăng nhập, in rshd, …) để đƣa ra shell.

1. Sdshell ra tín hiệu cho máy chủ với 1 thông điệp Hello (Hình 2.12). 2. Aceserver đáp ứng với 1 nhãn thời gian T(Hình 2.13).

3. Sdshell nhắc ngƣời dùng ngƣời dùng ‗nhập passcode‘. 4. Ngƣời dùng gửi lại passcode hiện thời, P.

5. Sdshell tính toán ra F2(IP, T, P), và chia nhỏ nó thành wp[1-4].

6. Sdshell gửi đi một gói UDP với (tên ngƣời dùng, Ec(wp[1])), (Hình 2.14). 7. Aceserver giải mã gói tin trên, và tính ra F2(IP, T, ). Nếu wp từ việc tính (adsbygoogle = window.adsbygoogle || []).push({});

toán đó phù hợp với cái đƣợc gửi đi bởi sdshell thì giả sử ngƣời dùng đã có thẻ và pin, và sẽ đƣợc cho phép vào. Nếu không, aceserver sẽ tính ra F2(IP, T, +1) và F2(IP, T, -1) và so sánh chúng với giá trị nhận đƣợc.

8. Nếu nhƣ sự so khớp thành công thì một thông điệp xác thực sẽ đƣợc gửi đi cho sdshell: Ewp[2](authorization), shell chạy. Ngƣợc lại nếu không khớp, aceserver sẽ xem xét với khoảng từ -10 đến +10. Nó có thể gửi đi 1 thông điệp yêu cầu 1 tokencode thứ hai để nó đảm bảo rằng việc ƣớc lƣợng giờ của nó là chính xác. Nó cũng có thể gửi lại 1 thông điệp lỗi, đƣợc mã hoá với wp[1] giống nhƣ khoá .

Một phần của tài liệu Nghiên cứu xây dựng hệ thống đảm bảo an toàn truyền tin trên mạng Vinaphone (Trang 54)