TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN
AN TOÀN THÔNG TIN
Đề tài: “Tìm Hiểu về SSH “
Giáo viên hướng dẫn : NGUYỄN VĂN HOÀNG
Nhóm sinh viên thực hiện : Tin học C – 52
- Nguyễn Thị Nga
- Nguyễn Thị Phương Thảo
Hà Nôi, Tháng 3/2011
Nhóm 22 – Chuyên đề về SSH
MỤC LỤC
MỤC LỤC 2
1. Khái niệm về SSH 4
2. Lịch sử phát triển của SSH 5
3. Các đặc điểm của SSH 6
4. Kiến trúc chung của một hệ thống SSH 8
5. Bên trong SSH 10
5.1 Bên trong SSH-2 10
5.2 Tóm tắt cơ chế hoạt động của SSH-2 11
5.3 Giao thức lớp vận chuyển SSH (SSH- TRANS) 12
5.3.1 Tiến trình tạo kết nối 12
5.3.2 Tiến trình chọn lựa phiên bản giao thức 12
5.3.3 Tiến trình thương lượng tham số 13
5.3.4 Tiến trình trao đổi khóa và xác thực server 16
5.4 Giao thức chứng thực SSH (SSH - AUTH) 17
5.4.1 Tiến trình yêu cầu chứng thực 17
5.4.2 Tiến trình hồi đáp chứng thực 18
5.4.3 Chứng thực khóa công khai 18
5.4.4 Xác thực password 19
Mỗi khi dữ liệu được gửi bởi một máy tính vào mạng, SSH tự động mã hóa nó. Khi
dữ liệu được nhận vào, SSH tự động giải mã nó. Kết quả là việc mã hóa được thực hiện trong
suốt, người dùng có thể làm việc bình thường mà không biết rằng việc truyền thông của họ đã
được mã hóa an toàn trên mạng. SSH có thể được sử dụng để :
- Đăng nhập vào trình bao trên một máy chủ từ xa ( thay thế cho telnet và rlogin).
- Thực thi một lệnh duy nhất trên máy chủ từ xa.
- Truyền tập tin an toàn ( giao thức truyền tập tin SSH-SFTP, sao chép an toàn _ SCP)
- Sao lưu, sao chép và nhân bản tập tin một cách hiệu quả và an toàn.
- Chuyển tiếp hoặc truyền đa giao thực một cổng.
- Sử dụng làm VPN được mã hóa chính thức ( chỉ đối với OpenSSH).
- Chuyển tiếp X từ một máy chủ từ xa.
- Duyệt web thông qua sự kết nối proxy có mã hóa với các khách hàng SSH ( giao
thức SOCKS).
- Lắp đặt một thư mục vào một máy chủ từ xa để làm hệ thống file trên máy tính nội
bộ một cách an toàn.
- Tự động giám sát và quản lý máy chủ từ xa.
- Cộng tác an toàn với nhiều người sử dụng kênh shell SSH (truyền, trao đổi, chia sẻ).
4
Nhóm 22 – Chuyên đề về SSH
2. Lịch sử phát triển của SSH
Năm 1995, Tatu Ylõnen, một nhà nghiên cứu ở trường đại học kĩ thuật Helsinki của
Phần Lan đã nghiên cứu và trình bày về SSH1 và giao thức SSH-1. Sau khi mạng trường đại
học của ông ta là nạn nhân của một cuộc tấn công đánh cắp password vào đầu năm đó.
Tháng 7 năm 1995, SSH1 được phát hành rộng rãi dưới dạng một phần mềm miễn phí
có source code, cho phép mọi người sao chép và sử dụng mà không thu phí. Vào cuối năm
đó, ước tính có khoảng 20.000 người dùng trên 50 quốc gia đã sử dụng SSH1, và mỗi ngày
Ylõnen nhận 150 mail yêu cầu hỗ trợ. Để đáp lại, Ylõnen đã thành lập SSH Communications
Security (SCS, ) vào tháng 12 năm 1995 để duy trì, thương nghiệp hoá và
tiếp tục phát triển SSH.
Cũng trong năm 1995, Ylõnen soạn thảo giao thức SSH-1 còn gọi là Internet
OpenSSH tương đối mới và không có vài đặc điểm có trong SSH1 và SSH2 nhưng nó đang
trên đà phát triển nhanh chóng và hứa hẹn trở thành bản SSH chính trong tương lai không xa.
3. Các đặc điểm của SSH
- Tính bí mật ( Privacy / Encryption)
Tính bí mật có nghĩa là bảo vệ dữ liệu không bị phơi bày. Mạng máy tính bình thường
không bảo đảm tính bí mật, bất cứ ai truy cập vào mạng hoặc đến những host kết nối với
mạng đều có thể sẽ đọc được mọi dữ liệu đi qua mạng. Hiện nay tuy việc đảm bảo bí mật đã
được quan tâm rất nhiều nhưng trong mạng vùng cục bộ thì vẫn còn xảy ra một số vấn đề như
việc mật khẩu bị kẻ xấu ăn cắp….
SSH cung cấp tính bí mật bằng việc mã hoá dữ liệu đi qua mạng. Đó là việc mã hoá
hai đầu dựa trên khoá ngẫu nhiên (-session key) (sinh ra để phục vụ cho một phiên kết nối và
được huỷ đi khi phiên kết nối thành công). SSH hỗ trợ nhiều thuật toán mã hoá đối với phiên
dữ liệu, đó là những thuật toán mã hoá chuẩn như: AES, ARCFOUR, Blowfish, Twofish,
IDEA, DES và triple-DES (3DES)
-Tính toàn vẹn (Integrity)
Là đảm bảo dữ liệu được truyền từ đầu này đến đầu kia của mạng không bị thay đổi.
Giao thức SSH sử dụng phương pháp kiểm tra toàn vẹn mật mã, phương pháp này kiểm tra cả
việc dữ liệu có bị biến đổi hay không và dữ liệu đến có đúng là do đầu kia gửi hay không. Nó
sử dụng thuật toán băm khóa là MD5 và SHA-1.
-Chứng minh xác thực (authentication)
Chứng minh xác thực là việc kiểm tra định danh của ai đó để xác định chính xác đúng
là người đó hay không. Mỗi kết nối SSH bao gồm hai việc xác thực: client kiểm tra định danh
của SSH server (server authentication) và server kiểm tra định danh của người sử dụng yêu
cầu truy cập (user authentication). Server authentication chắc chắn rằng SSH server là chính
xác và không phải là kẻ lừa đảo để đề phòng kẻ tấn công lại gửi kết nối mạng đến một máy
6
Nhóm 22 – Chuyên đề về SSH
khác. Server authentication cũng bảo vệ việc bị kẻ xấu ngồi ở giữa hai bên, lừa gạt cả hai bên
nghĩa là kẻ xấu sẽ nói với server nó là client và nói với client nó là server để đọc được dữ liệu
trao đổi giữa hai bên
Nhóm 22 – Chuyên đề về SSH
+ TCP port forwarding : SSH sử dụng TCP/IP làm cơ chế vận chuyển của nó, thường là cổng
22 trên máy chủ, vì nó mã hóa và giải mã lưu lượng truy cập qua kết nối.
Những ứng dụng khác sử dụng giao thức TCP như telnet, SMTP, NNTP, IMAP và
một số giao thức khác cũng có thể được hướng tới các port TCP khác dùng SSH. Quá trình
này được gọi là TCP port forwarding. Port forwarding được gọi là đường hầm vì kết nối SSH
cung cấp một “đường hầm” xuyên qua để cho các kết nối TCP khác có thể đi qua. Tuy nhiên
SSH Port forwarding chỉ hoạt động trên giao thức TCP và không làm việc được trên các giao
thức khác như UDP hay AppleTalk.
4. Kiến trúc chung của một hệ thống SSH
SSH có khoảng một bộ 12 thuộc tính riêng lẻ, các thành phần tác động lẫn nhau cho
ra các nét đặc trưng riêng. SSH cũng có khoá (keys), phiên (sessions) và những thành phần
khác. Dưới đây là một bản tóm tắt tổng quan của tất cả các thành phần .
Server
Một chương trình cho phép đi vào kết nối SSH với một bộ máy, trình bày xác thực,
8
Nhóm 22 – Chuyên đề về SSH
cấp phép, … Trong hầu hết SSH bổ sung của Unix thì server thường là sshd.
Client
Một chương trình kết nối đến SSH server và đưa ra yêu cầu như là “log me in” hoặc
“copy this file”. Trong SSH1, SSH2 và OpenSSH, client chủ yếu là ssh và scp.
Session
Một phiên kết nối giữa một client và một server. Nó bắt đầu sau khi client xác thực
thành công đến một server và kết thúc khi kết nối chấm dứt. Session có thể được tương tác
với nhau hoặc có thể là một chuyến riêng.
Key
Một lượng dữ liệu tương đối nhỏ, thông thường từ mười đến một hoặc hai ngàn bit.
Tính hữu ích của việc sử dụng thuật toán ràng buộc khoá hoạt động trong vài cách để giữ
khoá: trong mã hoá, nó chắc chắn rằng chỉ người nào đó giữ khoá (hoặc một ai có liên quan)
có thể giải mã thông điệp, trong xác thực, nó cho phép bạn kiểm tra trễ rằng người giữ khoá
Known hosts database
Là một chồng host key. Client và server dựa vào cơ sở dữ liệu này để xác thực lẫn
nhau.
Agent
Một chương trình lưu user key trong bộ nhớ. Agent trả lời cho yêu cầu đối với khoá
quan hệ hoạt động như là kí hiệu một giấy xác thực nhưng nó không tự phơi bày khoá của
chúng. Nó là một đặc điểm rất có ích. SSH1, SSH2 và OpenSSH có agent ssh-agent và
chương trình ssh*add để xếp vào và lấy ra khoá được lưu.
Signer
Một chương trình kí hiệu gói chứng thực hostbased.
Random seed
Một dãy dữ liệu ngẫu nhiên đựoc dùng bởi các thành phần SSH để khởi chạy phần
mềm sinh số ngẫu nhiên .
Configuration file
Một chồng thiết lập để biến đổi hành vi của một SSH client hoặc SSH server. Không
phải tất cả thành phần đều được đòi hỏi trong một bản bổ sung của SSH. Dĩ nhiên những
server, client và khoá là bắt buộc nhưng nhiều bản bổ sung không có agent và thậm chí vài
bản không có bộ sinh khoá.
5. Bên trong SSH
5.1 Bên trong SSH-2
Giao thức SSH-2 được chia làm 4 bộ phận chính, được diễn tả như 4 giao thức riêng
rẽ trong nhiều tài liệu IETF khác nhau. Theo thông thường, chúng được sắp xếp cùng với
nhau để cung cấp thiết lập các dịch vụ mà hầu hết người dùng kết hợp chúng thành một
SSH-2 đầy đủ.
10
Nhóm 22 – Chuyên đề về SSH
- Giao thức lớp vận chuyển SSH (SSH-TRANS)
- Giao thức xác thực SSH (SSH-AUTH)
- Giao thức kết nối SSH (SSH-CONN)
- Giao thức truyền file SSH (SSH-SFTP)
sẽ đọc cấu hình file của nó và sau đó tạo một kết nối TCP đến phía bên đầu xa (ví dụ
host.foo.net) như sau:
$ ssh -vv host.foo.net
OpenSSH_3.6.1p1+CAN-2003-0693, SSH protocols 1.5/2.0, OpenSSL 0x0090702f
debug1: Reading configuration data /Users/res/.ssh/config
debug1: Applying options for com
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to host.foo.net [10.1.1.1] port 22.
debug1: Connection established.
5.3.2 Tiến trình chọn lựa phiên bản giao thức
Càng sớm càng tốt khi server chấp nhận kết nối, giao thức SSH bắt đầu. Server thông
báo phiên bản giao thức của nó bằng một chuỗi văn bản :
Debug1: Remote protocol version 2.0, remote software version 4.1.0.34 SSH Secure Shell
Bạn có thể thấy chuỗi này trong kết nối đơn giản của bạn đến server như telnet:
12
Nhóm 22 – Chuyên đề về SSH
$ telnet host.foo.net 22
Trying 10.1.1.1…
Connected to host.foo.net
Escape character is ‘^]’.
SSH-2.0-4.1.0.34 SSH Secure Shell
^]
telnet> quit
Connection closed.
Định dạng của thông báo là : SSH-<Phiên bản giao thức >-<Lời chú thích>
Trong trường hợp này, server dùng giao thức SSH-2 và phần mềm 4.1.0.34 của SSH
từ công ty bảo mật truyền thông (SSH Communication Sercurity). Mặc dù trường chú thích
có thể bao gồm mọi thức nhưng SSH server thường chỉ đưa vào đó tên và phiên bản sản
phẩm. Điều này rất có ích để client nhận biết chính xác server dùng sản phẩm và phiên bản
Thuật toán trao đổi khoá mà client hỗ trợ là: diffie-hellman-group1-sha1
Thuật toán này được định nghĩa và yêu cầu bởi SSH-TRANS, chỉ rõ cho biết là dùng
thủ tục Diffie-Hellman để thoả thuận khoá cùng với những tham số cụ thể khác (Oakley
Group 2 và thuật toán băm SHA-1).
diffie-hellman-group-exchange-sha1
Tương tự, nó cho phép client chọn từ một danh sách các nhóm tham số, địa chỉ liên
quan về những khả năng có thể bị tấn công dựa trên một nhóm được bố trí trước, định nghĩa
trong tài liệu phác thảo IETF “secsh-dh-group-exchange”
gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==
gss-group1-sha1-A/vxljAEU54gt9a48EiANQ==
Những các tên trông kỳ quặc là được mã hóa Base64 – chúng hiển thị hai giá trị khác
nhau của xác thực Kerberos, trao đổi Diffe-Hellman. Một cơ sở hạ tầng Kerberos có sẵn cung
cấp xác thực server tự động và linh hoạt mà không cần xác nhận SSH host key và file known-
host riêng. Xác thực Kerberos được cung cấp bởi GSSAPI và những tên phía sau là mã hóa
Base64 của hàm băm MD5.
14
Nhóm 22 – Chuyên đề về SSH
Trong điều kiện tóm tắt của thỏa thuận, một thuật toán trao đổi khoá SSH có hai đầu ra :
Một share secret, K
Một “exchange hash”, H
K là tham số bí mật chính đối với phiên: SSH-TRANS định nghĩa một phương thức
đối với secret K từ những nguồn gốc khoá khác nhau và những tham số mã hoá khác cần thiết
cho việc mã hoá cụ thể và thuật toán toàn vẹn dữ liệu được sử dụng trong kết nối SSH.
Exchange hash H thì không bí mật, mặc dù nó không cần thiết để lộ ra và nó là duy nhất
trong mỗi phiên .
Trao đổi khoá cũng diễn ra trên xác thực server để đề phòng việc giả mạo và tấn công
man-in-the-middle và có thể được lặp lại trong một kết nối để thay thế một cái cũ hoặc xác
thực lại server. Tiếp theo, client cung cấp một kiểu SSH host key mà nó có thể chấp nhận :
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,null
Trong trường hợp này, nó cung cấp RSA, DSA và null đối với trường hợp không có
Kế đến, mỗi bên chọn các thuật toán tương ứng từ các thuật toán hỗ trợ của bên kia:
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
Trong trường hợp này, việc chọn lựa trên cả hai bên là giống nhau. Tuy nhiên, chúng
không cần thiết phải giống. Việc mỗi bên chọn lựa một thuật toán hay một khoá độc lập với
nhau cũng không có hại gì.
5.3.4 Tiến trình trao đổi khóa và xác thực server
Tại thời điểm này, chúng sẵn sàng để đưa ra danh sách trao đổi khoá:
debug2: dh_gen_key: priv key bits set: 131/256
debug2: bits set: 510/1024
debug1: sending SSH2_MSG_KEXDH_INIT
Client chọn một thuật toán trao đổi khoá từ bộ thông báo của server, trong trường hợp
này thì server chỉ đưa ra có một cái. Nó sinh ra một khoá tạm thời như một phần của thuật
toán Diffe-Hellman và gửi thông điệp khởi tạo của trao đổi diffie-hellman-group1-sha1, cùng
lúc đó server biết được phương thức mà hai bên sử dụng và bắt đầu trao đổi.
16
Nhóm 22 – Chuyên đề về SSH
Tiếp theo, client đợi và server gửi thông điệp KEXDH_INIT của chúng:
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Host ‘host.foo.net’ is known and matches the DSA host key.
debug1: Found key in /Users/res/.ssh/known_hosts:169
debug2: bits set: 526/1024
debug1: ssh_dss_verify: signature correct
Bao gồm trong phần trả lời của server là khoá công khai SSH của nó, cùng với một
chữ kí cung cấp khoá bí mật tương ứng mà nó giữ. Dĩ nhiên chữ kí sẽ được kiểm tra nhưng
không có ý nghĩa quan trọng, bước quan trọng ở đây là kiểm tra định danh khoá công khai
của server. Trong ví dụ này, client tìm một bản kết hợp tên foo.host.net với khoá được cung
cấp bởi server. SSH-2 hỗ trợ hệ thống PKI (Public Key Infrastructure) để kiểm tra khoá công
khai, định nghĩa một số kiểu khoá bao gồm gắn với giấy xác thực :
Ssh-rsa Plain RSA key
những phương thức chứng thực trước đó đã bị lỗi. Nếu cờ partical được bật lên thì thông báo
có nghĩa là phương thức đã thành công. Tuy nhiên, server yêu cầu phải bổ sung những
phương thức còn bị lỗi khác cho thành công trước khi đồng ý cho truy cập.
5.4.3 Chứng thực khóa công khai
Một yêu cầu chứng thực khoá công khai mang phương thức có tên là “publickey” và
có thể có nhiều dạng khác nhau phụ thuộc vào một cờ được thiết lập. Một dạng của phương
thức này là:
flag = FALSE
Tên thuật toán
Dữ liệu khoá
Thuật toán khoá công khai có thể dùng là những thuật toán thiết lập trong SSH-TRANS và
định dạng dữ liệu khoá phụ thuộc vào kiểu khoá như ssh-dss hay ssh-rsa.
Với cờ thiết lập là FALSE, thông báo này chỉ đơn thuần là kiểm tra xác thực: nó yêu cầu
server kiểm tra khoá này có được xác thực để truy cập như mong muốn của tài khoản hay
không, nếu được thì gửi lại một thông báo cho biết. Nếu khoá không được xác thực, hồi đáp
có giá trị FALSE đơn giản. Sau khi xác nhận khoá và gửi thông báo thành công, server cho
biết đã chấp nhận truy cập và kết thúc phiên SSH-AUTH.
18
Nhóm 22 – Chuyên đề về SSH
5.4.4 Xác thực password
Phương thức mật khẩu thì rất đơn giản: nó tên là “password”. Phương thức này chỉ có
trong một số bản bổ sung của SSH2. Sau khi kiểm tra các tham số thích hợp, server sẽ gửi
thông báo chấp nhận truy cập của client và nếu có giao thức này thì server sẽ gửi kết hợp
password với thông báo đó để xác thực với client.
5.4.5 Xác thực dựa trên host (hostbased)
Cũng là một phương thức của một số bản bổ sung. Phương thức này dùng để server
xác thực client mà nó đã nhận yêu cầu có đúng hay không dựa trên tên máy. Giả sử rằng bạn
ở máy A gửi yêu cầu đến server nhưng không đi trực tiếp đến server mà trên đường truyền
phải đi qua máy B thì server không kiểm tra máy B mà sẽ kiểm tra xem có phải bên gửi yêu
cầu truy cập đến nó có phải là máy A hay không
cancel-tcpip-forward: huỷ bỏ một chuyển tiếp từ xa
pty-req: chỉ định một pty, bao gồm kích cỡ cửa sổ và kiểu thiết bị đầu cuối.
x11-req: cài đặt chuyển tiếp x11
env: thiết lập một biến điều kiện.
shell, exec, subsystem: chạy tiện ích tài mặc định của tài khoản, một chương trình tuỳ ý, hoặc
một dịch vụ đơn giản.
window-change: thay đổi kích thước cửa sổ thiết bị đầu cuối
xon-xoff: dùng điều khiển bên client
signal: gửi một tín hiệu đặc biệt đến một tiến trình ở xa.
exit-signal: trả về một tín hiệu kết thúc chương trình.
Khi SSH-CONN chạy, client gửi yêu cầu và mở một kênh phiên. Sau đó gửi một số
yêu cầu muốn thực hiện thông qua các kênh…Bây giờ thì client đã đăng nhập thành công vào
máy chủ SHH từ xa.
5.6 Bên trong SSH-1
SSH-1 cũng tương tự như SSH-2 nhưng có một số điểm khác,chúng ta sẽ so sánh
những đặc điểm đó với SSH-2 để hình dung SSH-1:
non-modular: SSH-1 được định nghĩa như một giao thức nguyên đơn, còn SSH-2 được thiết
kế modul hoá.
less negotiation: SSH-1 có nhiều tham số cố định, thực ra, chỉ có kích thước mã hoá là được
thương lượng. Thuật toán nhận dạng, kiểu khoá host, phương thức trao đổi khoá,…tất cả đều
cố định.
20
Nhóm 22 – Chuyên đề về SSH
ad hoc naming: SSH-1 không có cú pháp định nghĩa tên linh hoạt như SSH-2 và không có
phần mở rộng bổ sung rõ ràng.
Single authentication: Quá trình xác thực user của SSH-1 chỉ cho phép một phương thức hoạt
động thành công, Server không thể yêu cầu nhiều phương thức.
RhostsRSA authentication: Xác thực RhostsRSA của SSH-1 tương tự như xác thực dựa trên
host về cơ bản là có giới hạn khi sử dụng địa chỉ mạng làm định danh máy client.
Less flexible remote forwarding: SSH-1 chỉ rõ chuyển tiếp từ xa chỉ trên một cổng, vì thế
SSH-2 không lâu sau khi sáng chế hết hiệu lực.
Hoạt động của SCP
6.1.2 Thuật toán chữ ký số (DSA)
Thuật toán chữ ký số được phát triển bởi cơ quan an ninh quốc gia Mỹ (NSA) và
được công bố bởi viện tiêu chuẩn và công nghệ quốc gia Hoa Kỳ và trở thành chuẩn chữ ký
số (DSS). DSS được đưa ra như là một chuẩn xử lý thông tin liên bang, FIPS-186 vào tháng 5
năm 1994. Nó là một thuật toán public-key phụ thuộc vào phương pháp Schnorr và ElGamal,
dựa vào độ khó của việc tính toán riêng rẽ các logarit trong một trường có giới hạn. Nó được
thiết kế là một chữ ký không dùng cho mã hóa, mặc dù bản bổ xung đầy đủ có thể thực thi dễ
dàng với cả 2 loại mã hóa RSA và ElGarmal.
DSA cũng bị cuốn vào 1 cuộc tranh cãi kể từ khi nó ra đời. Ban đầu, NIST cho rằng
họ đã thiết kế ra DSA, nhưng sau đó họ tiết lộ là NSA đã tạo ra nó. Rất nhiều câu hỏi xoay
22
Nhóm 22 – Chuyên đề về SSH
quanh NSA. Researcher Gus Simmons phát hiện ra 1 phần trong DSA cho phép tạo lỗ hổng
rò rỉ thông tin, ví dụ các bit khóa bí mật kèm theo mỗi chữ ký. Khi thuật toán được dùng
trong trong các thẻ thông minh trong chương trình Capstone của chính phủ, nhiều người vẫn
còn nghi ngờ. Cuối cùng NIST dành DSA miễn phí cho mọi người dùng. Đến sau cùng, nó
được sáng chế bởi David Kravitz (sáng chế #5,231,668), sau đó một nhân viên của NSA đã
chuyển sáng chế này cho chính phủ Mỹ. Tuy nhiên, cũng có những yêu cầu, rằng DSA xâm
phạm bằng sáng chế, bao gồm cả sáng chế Shnorr. Cho đến giờ vẫn chưa có sự thay đổi nào
từ tòa án.
Giao thức SSH-2 cần phải sử dụng DSA để xác nhận host.
6.1.3 Thuật toán thoả thuận khoá Diffie-Hellman
Thuật toán Diffie-Hellman được giới thiệu lần đầu tiên trong thư viện mở, được sáng
tạo bởi Whitfield Diffie, Martin Hellman va Ralph Merkle vào năm 1976, được cấp bằng
sáng chế năm 1977 (phát hành vào năm 1980, số #4,200,770) giờ thì bằng sáng chế đã hết
hạn. Cũng giống như DSA, nó dựa vào sự rời rạc của bài toán logarit, nó cho phép 2 bên lấy
được 1 khóa chia sẻ an toàn trên 1 kênh mở. Các phần trao đổi các thông điệp với nhau, sau
cùng chúng chia sẻ 1 khóa bí mật. 1 kẻ rình mò không thể lấy được thông tin từ quá trình này.
toán mã hoá miễn phí không đăng kí bản quyền. Chiều dài khoá của Blowfish thay đổi từ 32
đến 448 bit. SSH-2 sử dụng Blowfish với chiều dài khoá là 128 bit. Có thể tham khảo thêm
về Blowfish tại: />6.2.7 Twofish
Twofish là một thuật toán mã hoá được Bruce Schneier thiết kế cùng với J.Kelsey,
D.Wagner, C.Hall và N. Ferguson. Nó được đón nhận năm 1998 và thay thế DES ở Mỹ. Đây
cũng là một thuật toán mã hoá miễn phí cho mọi người. Twofish mã hoá với chiều dài khoá
128, 192, hoặc 256 bít. SSH-2 sử dụng 256 bit. Nó rất nhanh và cũng có tính bảo mật khá
cao. Website: />6.2.8 CAST
CAST được thiết kế vào đầu những năm 1990 bởi Carlisle Adams và Stafforf
24
Nhóm 22 – Chuyên đề về SSH
Tavares. CAST sử dụng chiều dài khoá 128 hoặc 256 bit. Trong SSH-2, CAST được sử dụng
với chiều dài khoá là 128 bit .
6.3 Những hàm băm
6.3.1 CRC-32
Thuật toán 32-bit Redundancy Check (CRC-32) được định nghĩa trong ISO 3309, là
một hàm băm không mã hoá đối với việc dò tìm lỗi thay đổi dữ liệu. Giao thức SSH-1 sử
dụng CRC-32 cho việc kiểm tra toàn vẹn dữ liệu và đề phòng hình thức tấn công “insertion
attack” (tấn công bằng cách chèn mã độc vào dữ liệu).
6.3.2 MD5
MD5 (Message Digest algorithm number 5) là một thuật mã hoá mạnh, là thuật toán
băm 128 bit được thiết kế bởi Ron Rivest năm 1991, MD5 cũng là một thuật toán công cộng
không đăng kí bản quyền.
6.3.3 SHA-1
SHA-1 (Secure Hash Algorithm 1) được thiết kết bởi NSA và NIST . Cũng giống như
MD5, nó được cải tiến từ MD4 nhưng cải tiếp theo một cách khác. Nó cung cấp hàm băm
160 bit. Xét về bảo mật thì nó mạnh hơn MD5 vì giá trị băm dài hơn. SSH-2 sử dụng SHA-1
để băm MAC còn SSH-1 thì sử dụng MD5.
6.3.4 RIPEMD-160
RIPEMD-160 là một bản khác của MD4, đựợc phát triển bởi Hans Dobbertin, Antôn