Tải bản đầy đủ (.doc) (32 trang)

Tiểu luận môn an toàn thông tin Tìm Hiểu về SSH

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (619.21 KB, 32 trang )

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


5.4.5 Xác thực dựa trên host (hostbased) 19
5.5.1 Kênh (channels) 19
5.5.2 Yêu cầu (request) 20
5.6 Bên trong SSH-1 20
6. Các thuật toán được sử dụng trong SSH 21
6.1 Những thuật toán khóa công khai 21
6.1.2 Thuật toán chữ ký số (DSA) 22
2
Nhóm 22 – Chuyên đề về SSH
6.2 Những thuật toán khoá bí mật 23
6.3 Những hàm băm 25
7. Các loại tấn công mà SSH có thể cản được 25
7.1 Eavesdropping 25
7.2 Dịch vụ đặt tên và giả mạo IP 26
7.4 Các kiểu tấn công Man-in-the-Middle 26
8 . Các mối đe dọa mà SSH không thể cản 28
3
Nhóm 22 – Chuyên đề về SSH
Các chương trình mã hóa trước đây như: telnet, rlogin không sử dụng phương pháp
mã hóa. Vì thế bất cứ ai cũng có thể nghe trộm thậm chí đọc được toàn bộ nội dung của
phiên làm việc bằng cách sử dụng một số công cụ đơn giản. Sử dụng SSH là biện pháp hữu
hiệu bảo mật dữ liệu trên đường truyền từ hệ thống này đến hệ thống khác.
1. Khái niệm về SSH
SSH (tiếng anh :Secure Shell ) là một giao thức mạng dùng để thiết lập kết nối mạng
một cách bảo mật. SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP. Các công cụ
SSH (như là OpenSSH, PuTTy….) cung cấp cho người dùng cách thức để thiết lập kết nối
mạng được mã hóa để tạo một kênh kết nối riêng tư. Hơn nữa tính năng tunneling (hoặc còn
gọi là port forwarding) của các công cụ này cho phép chuyển tải các giao vận theo các giao
thức khác. Do vậy có thể thấy khi xây dựng một hệ thống mạng dựa trên SSH, chúng ta sẽ có
một hệ thống mạng riêng ảo VPN đơn giản.

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

Engineering Task Force (IETF), nó diễn tả hoạt động cơ bản của phần mềm SSH1 trên thực
tế. Nó là một giao thức có phần quảng cáo nhưng còn một số lỗi và giới hạn nhưng rất phổ
biến. Năm 1996, SCS giới thiệu một phiên bản mới đó là phiên bản chính của giao thức, SSH
2.0 hay SSH-2, phiên bản này được kết hợp chặt chẽ những thuật toán mới và không hợp với
SSH-1. Trong lúc đó, IETF thành lập một nhóm làm việc gọi là SECSH (Secure Shell) để
chuẩn hoá giao thức và chỉ đạo sự phát triển của nó trên lợi ích chung. Nhóm làm việc
SECSH đã trình bày bản phác thảo Internet đầu tiên đối với giao thức SSH-2 vào tháng 2
năm 1997.
Năm 1998, SCS phát hành sản phẩm phần mềm “SSH Secure Shell” (SSH2), dựa
trên giao thức SSH-2. Tuy nhiên, SSH2 không thay thế SSH1 trong một số lĩnh vực, có 2 lí
do. Thứ nhất, SSH2 không có một số tiện ích, các đặc điểm có ích và cấu hình tuỳ chọn như
SSH1. Thứ hai, SSH2 có nhiều giới hạn về việc đăng kí. Bản chính SSH1 đã có sẵn miễn phí
từ Ylõnen và trường đại học kĩ thuật Helsinki. Phiên bản mới hơn của SSH1 từ SCS vẫn có
sẵn miễn phí cho hầu hết người dùng, thậm chí cả cấu hình thương mại cũng miễn phí chỉ cần
phần mềm đó không được trực tiếp bán cho việc thu lợi nhuận hoặc được tặng như là một
dịch vụ cho khách hàng. Vì thế, tuy SSH2 đã xuất hiện, nhưng hầu hết những người đang sử
dụng SSH1 đều nhận ra vài ưu điểm của SSH1 so với SSH2 và tiếp tục sử dụng SSH1, ba
năm sau khi SSH2 ra đời thì SSH1 vẫn là phiên bản được sử dụng phổ biến trên Internet và
vượt qua cả SSH2 là giao thức tốt hơn và bảo mật hơn.
Tuy nhiên, SSH2 cũng có hai sự phát triển hứa hẹn, đó là một bản nới lỏng của SSH2
bản quyền và sự xuất hiện SSH-2 bổ sung. Năm 2000, SCS mở rộng SSH2 bản quyền để cho
phép sử dụng khi làm việc riêng lẻ đối với các tổ chức hoạt động phi lợi nhuận. Nó cũng
5
Nhóm 22 – Chuyên đề về SSH
được mở rộng cho phép dùng miễn phí đối với Linux, NetBSD, FreeBSD và hệ điều hành
OpenBSD. Cùng thời gian đó, OpenSSH () đã được phát triển nổi
bật như là một SSH bổ sung, được phát triển dưới hoạt động của dự án OpenBSD
() và miễn phí sẵn bên dưới OpenBSD có đăng kí. OpenSH hỗ trợ cả
SSH-1 và SSH-2 trong một chương trình. Tuy OpenSSH được phát triển trên nền OpenBSD
nhưng nó cũng hoạt động được trên Linux, Solais, AIX và những hệ điều hành khác. Mặc dù

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

User authentication theo truyền thống là làm việc với mật khẩu. Để xác thực định
danh của bạn, bạn phải đưa ra mật khẩu, và dễ bị lấy cắp. Thêm nữa, để dễ nhớ một mật
khẩu, người ta thường đặt nó ngắn và có ý nghĩa nào đó nên dễ bị kẻ xấu đoán ra. Đối với
mật khẩu dài hơn thì người ta thường chọn những từ hoặc câu trong ngôn ngữ bẩm sinh nên
cũng dễ bị bẻ khoá.
Mỗi định danh và truy cập của người sử dụng có thể được cung cấp theo nhiều cách
khác nhau. Chẳng hạn,kiểu chứng thực rhost có thể được sử dụng, nhưng không phải là mặc
định, nó đơn giản chỉ kiểm tra định danh của máy khách được liệt kê trong file rhost ( theo
DNS và địa chỉ IP). Việc chứng thực mật khẩu là một cách rất thông dụng để định danh
người sử dụng, nhưng ngoài ra cũng có các cách khác như chứng thực RSA, sử dụng ssh-
keygen và ssh-agent để chứng thực các cặp khóa.
-Phân quyền (authorization)
Việc phân quyền có tác dụng quyết định ai đó có thể hoặc không thể làm gì đó. Nó diễn ra
sau khi xác thực, vì bạn không thể biết là nên trao quyền nào đó mà không biết họ là ai.
SSH server có nhiều cách khác nhau để giới hạn hành động của client. Truy cập đến phiên
đăng nhập tác động lẫn nhau: TCP port và X Window forwarding, key agent forwarding.Việc
phân quyền có thể được điều khiển tại một mức server rộng (ví dụ: /etc/ssh/sshd_config file
đối với OpenSH) hoặc theo tài khoản phụ thuộc vào phương thức xác thực sử dụng.
- Chuyển tiếp (forwarding) hoặc tạo đường hầm (tunneling)
Chuyển tiếp hoặc tạo đường hầm là đóng gói dịch vụ dựa trên TCP khác như là Telnet hoặc
IMAP trong một phiên SSH mang lại hiệu quả bảo mật của SSH đến với các dịch vụ dựa trên
TCP khác. SSH hỗ trợ 3 kiểu chuyển tiếp :
+ X là một hệ thống window phổ biến đối với các trạm làm việc Unix, một trong những đặc
điểm của nó là tính trong suốt. Sử dụng X bạn có thể chạy ứng dụng X từ xa để mở các cửa
sổ của chúng trên màn hình hiển thị cục bộ của bạn.
+ Agent forwarding SSH client có thể làm việc với một SSH agent trên cùng một máy. Sử
dụng một đặc trưng gọi là agent forwarding, client cũng có thể liên lạc với các agent trên
những máy từ xa. Điều thuận lợi là nó cho phép client trên nhiều máy làm việc với một agent
và có thể tránh vấn đề liên quan đến tường lửa.
7

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á

thực sự đã kí hiệu vào thông điệp. Có hai loại khóa: khoá đối xứng hoặc khoá bí mật và
khoá bất đối xứng hoặc khóa công khai. Một khoá bất đối xứng hoặc khoá công khai có hai
phần: thành phần công khai và thàn phần bí mật.
Các loại khoá thành phần
User key
Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bởi client như một sự
chứng minh nhận dạng của user ( một người dùng đơn lẻ có thể có nhiều khoá) .
Host key
Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bởi server như sự chứng
minh nhận dạng của nó, cũng như được dùng bởi client khi chứng minh nhận dạng host của
nó như một phần xác thực đáng tin. Nếu một bộ máy chạy một SSH server đơn, host key
cũng là cái duy nhất để nhận dạng bộ máy đó. Nếu bộ máy chạy nhiều SSH server, mỗi cái
có thể có một host key khác nhau hoặc có thể dùng chung. Chúng thường bị lộn với server
key.
Server key
Tồn tại tạm thời, là khoá bất đối xứng dùng trong giao thức SSH-1. Nó được tái tạo
bởi server theo chu kỳ thường xuyên (mặc định là mỗi giờ) và bảo vệ session key. Thường
bị lộn với host key. Khoá này thì không bao giờ được lưu trên đĩa và thành phần bí mật của
nó không bao giờ được truyền qua kết nối ở bất cứ dạng nào, nó cung cấp “perfect forward
secrecy” cho phiên SSH-1.
9
Nhóm 22 – Chuyên đề về SSH
Session key
Là một giá trị phát sinh ngẫu nhiên, là khoá đối xứng cho việc mã hoá truyền thông
giữa một SSH client và SSH server. Nó được chia ra làm 2 thành phần cho client và server
trong một loại bảo mật trong suốt quá trình thiết lập kết nối SSH để kẻ xấu không phát hiện
được nó.
Key generator
Một chương trình tạo ra những loại khoá lâu dài( user key và host key) cho SSH.
SSH1, SSH2 và OpenSSH có chương trình ssh-keygen

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)

5.2 Tóm tắt cơ chế hoạt động của SSH-2
Một phiên hoạt động của SSH-2 trải qua 4 bước chủ yếu như sau:
+ Thiết lập kết nối ban đầu (SSH-TRANS) + Tiến hành xác thực lẫn nhau (SSH-AUTH) +
Mở phiên kết nối để thực hiện các dịch vụ (SSH-CONN) + Chạy các dịch vụ ứng dụng SSH
( có thể là SSH-SFTP).

SSH-TRANS là khối xây dựng cơ bản cung cấp kết nối ban đầu, ghi chép giao thức,
xác thực server, mã hoá cơ bản và các dịch vụ bảo toàn. Sau khi thiết lập một kết nối
SSH-TRANS, client có một kết nối đơn, bảo mật. Kế đến, client có thể dùng SSH-AUTH
thông qua kết nối SSH-TRANS đến xác thực nó với server. SSH-AUTH định nghĩa một
khung đối với việc nhiều cơ chế xác thực có thể được sử dụng, sửa chữa mọi thứ như là định
dạng và những yêu cầu khác của xác thực, những điều kiện để thành công hoặc có thể bị lỗi
và làm thế nào client sử dụng được những phương thức có sẵn. Có thể một phương thức bất
kỳ nào đó được thi hành, và giao thức cho phép trao đổi tùy ý một phần của bất kỳ cơ chế
riêng nào để phần mở rộng giao thức dễ định nghĩa để kết hợp chặt chẽ với bất cứ phương
11
Nhóm 22 – Chuyên đề về SSH
thức xác thực mong muốn nào trong tương lai. SSH-AUTH chỉ yêu cầu một phương thức:
public key với thuật toán DSS. Ngoài ra còn có hai phương pháp xác định thêm: mật khẩu
và hostbased .
Sau khi xác thực, SSH client yêu cầu giao thức SSH-CONN để cung cấp dịch vụ thông
qua một kênh đơn cung cấp bởi SSH-TRANS. Điều này bao gồm mọi thứ cần để hỗ trợ
nhiều phiên tương tác và phiên không tương tác: những luồng đa thành phần khác nhau
(hoặc channel) ngang qua kết nối bên dưới, quản lý X, TCP và agent forwarding, truyền tín
hiệu thông qua kết nối, nén dữ liệu và thực thi chương trình từ xa. Cuối cùng, một ứng dụng
có thể sử dụng SSH-SFTP qua một kênh SSH-CONN để cung cấp truyền file và các chức
năng thao tác hệ thống tập tin từ xa.
5.3 Giao thức lớp vận chuyển SSH (SSH- TRANS)
5.3.1 Tiến trình tạo kết nối
Để minh họa, chúng ta lấy một ví dụ một Client SSH chạy trên một máy Macintosh

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

nào để làm việc cho đúng và tránh lỗi hoặc không tương thích với nhau.
Phiên bản giao thức số “1.99” có ý nghĩa đặc biệt: nó hỗ trợ cả hai giao thức SSH-1
và SSH-2. Tiếp theo, OpenSSH phân tích lời chú thích:
debug1: no match: 4.1.0.34 SSH Secure Shell
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.6.1p1+CAN-2003-0693
Khi không tìm thấy một cái hợp với danh sách của nó thì nó biết là có vấn đề. Nó
chọn SSH-2 (chỉ chọn trong ví dụ này) và gửi chuỗi phiên bản của nó đến server giống như
cách mà server đã gửi. Nếu client và server đồng ý phiên bản của chúng đã tương thích thì
tiến trình kết nối tiếp tục, nếu không thì cả hai có thể kết thúc kết nối.
5.3.3 Tiến trình thương lượng tham số
Khi thiết lập kết nối và đồng ý trên một phiên bản, nhiệm vụ đầu tiên của
SSH-TRANS là chuẩn bị các thuộc tính bảo mật cơ bản của SSH:
∗ Tính bí mật (Privacy)
∗ Tính toàn vẹn (Integrity)
13
Nhóm 22 – Chuyên đề về SSH
∗ Xác thực server
∗ Nén dữ liệu
Nhưng đầu tiên, hai bên phải đồng ý các thông số phiên, bao gồm các phương thức để
đạt được các thuộc tính. Tiến trình diễn ra trong giai đoạn này gọi là tiến trình trao đổi khóa.
Debug1: SSH2_MSG_KEXINIT sent
Debug1: SSH2_MSG_KEXINIT receive
Client gửi thông báo KEXINIT (khởi tạo tạo đổi khoá) của nó và nhận một cái từ
server. Ở đây có sự chọn lựa nó đưa cho server:
debug2: kex_parse_kexinit:
gss-group1-sha1-toWM5Slw5Ew8Mqkay+al2g==,
gss-group1-sha1-A/vxljAEU54gt9a48EiANQ==,
diffie-hellman-group-exchange-sha1,
diffie-hellman-group1-sha1

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ó

khoá. Nó bao gồm cả null bởi vì nó hỗ trợ Kerberos cho xác thực host. Nếu dùng trao đổi
khoá Kerberos thì không có SSH host key nào cần thiết đối với việc xác thực server. Sau đó,
client liệt kê những thuật toán mã hoá dữ liệu mà nó hỗ trợ :
debug2: kex_parse_kexinit: aes128-cbc,3des-cbc, blowfish-cbc, cast128-cbc,arcfour,
aes192-cbc,aes256-cbc,
Dữ liệu chính thì không bao giờ được mã hoá trực tiếp với phương thức khoá công
khai như RSA hoặc DSA bởi vì chúng làm quá chậm. Thay vào đó, chúng ta sử dụng một
thuật toán khoá đối xứng như trong danh sách phía trên để bảo vệ khoá phiên đối với việc mã
hoá bằng phương thức khoá công khai nếu thích hợp.
Kế đến, client hiển thị danh sách các thuật toán toàn vẹn dữ liệu mà nó có sẵn:
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,hmac-ripemd160,
,hmac-sha1-96,hmac-md5-96
Thuật toán toàn vẹn được ứng dụng để mỗi thông điệp được gửi bởi giao thức hồ sơ
SSH cùng với một chuỗi số và một khoá phiên tạo ra một mã xác nhận thông điệp
(MAC:message authentication code) được thêm vào mỗi thông điệp. Bên nhận có thể dùng
MAC và bản sao chép khoá phiên của nó để kiểm tra thông điệp không bị biến đổi trên đường
15
Nhóm 22 – Chuyên đề về SSH
truyền, không bị truyền lặp lại và không phải là do một phiên khác gửi tới, đó là những thuộc
tính của toàn vẹn dữ liệu. Cuối cùng, client cho biết kỹ thuật nén dữ liệu mà nó hỗ trợ:
debug2: kex_parse_kexinit: none,zlib
Sau khi gửi thông điệp thoả thuận của nó, client cũng nhận từ server danh sách các
tham số mà server hỗ trợ:
debug2: kex_parse_kexinit: diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-dss,x509v3-sign-rsa
debug2: kex_parse_kexinit: aes128-cbc, 3des-cbc, twofish128-cbc, cast128-cbc,
twofish-cbc, blowfish-cbc, aes192-cbc, aes256-cbc,
twofish192-cbc, twofish256-cbc , arcfour
debug2: kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib

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

5.4 Giao thức chứng thực SSH (SSH - AUTH)
5.4.1 Tiến trình yêu cầu chứng thực
Quá trình chứng thực được client bắt đầu bằng yêu cầu chứng thực và server hồi đáp
lại. Một yêu cầu chứng thực bao gồm những phần như sau:
∗ Username U : là định danh giấy phép của client.
∗ Tên dịch vụ S: những việc mà client yêu cầu được truy cập, bắt đầu hoạt động thông qua
kết nối SSH-TRANS sau khi chứng thực thành công. Có thể có nhiều dịch vụ có sẵn
nhưng thông thường chỉ có một “ ssh-connection ” yêu cầu truy cập đến những dịch vụ
cung cấp khác nhau thông qua giao thức SSH-CONN: đăng nhập, thi hành lệnh từ xa,
chuyển tiếp cổng và tất cả những thứ khác mà người dùng muốn làm với SSH.
Tên phương thức M, và phương thức dữ liệu cụ thể D : Phương thức xác thực cụ thể được
dùng trong yêu cầu là “password” hoặc “publickey” và phương thức dữ liệu cụ thể truyền bất
cứ thứ gì cần thiết để bắt đầu trao đổi chứng thực rõ ràng, ví dụ, một mật khẩu được kiểm tra
bởi server. Như là tên khóa trao đổi trong SSH-TRANS thì tên có cú pháp “@domain” có thể
17
Nhóm 22 – Chuyên đề về SSH
được dùng bởi bất cứ ai để thực hiện phương pháp cục bộ, trong khi những tên không có @
phải được đăng ký tên toàn bộ các phương thức chứng thực SSH. Mỗi khi phương thức
chứng thực bắt đầu, nó có thể bao gồm bất kỳ một số kiểu thông điệp chi tiết nào khác mà nó
cần. Hoặc trong trường hợp đơn giản, dữ liệu mang bởi yêu cầu ban đầu cũng đã đủ và server
có thể hồi đáp đúng như thể. Trong bất cứ trường hợp nào, sau khi yêu cầu và sau vài phương
thức thông điệp theo sau đó thì server cấp phát một hồi đáp chứng thực.
5.4.2 Tiến trình hồi đáp chứng thực
Một hồi đáp chứng thực có hai trạng thái: Thành công và thất bại. Một thông báo
thành công không mang dữ liệu nào khác ngoài thông báo là xác thực đã thành công và dịch
vụ yêu cầu đã được bắt đầu. Thêm nữa, thông báo SSH-TRANS được client gửi được định
nghĩa cùng với giao thức của dịch vụ và SSH-AUTH được chạy .
Một thông báo lỗi có sẽ có cấu trúc như sau:
- Một danh sách các phương thức chứng thực có thể tiếp tục.
- Một cờ “ partial success”.Nếu cờ partial success không bật lên thì thông báo đó có nghĩa là

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

5.5 Giao thức kết nối SSH-CONN
Khi yêu cầu xác thực thành công, client se có một dịch vụ tên “ssh-con” nhưng nó không hiển
thị trên client mà hiển thị trên server như sau:
debug1: userauth-request for user res service ssh-connection method publickey
Server bắt đầu chạy dịch vụ và hai bên đi đến giao thức kết nối SSH
5.5.1 Kênh (channels)
Dịch vụ cơ bản SSH-CONN cung cấp là multilexing. SSH-CONN điều khiển một
kênh đơn, bảo đảm, luồng byte đôi được cung cấp bởi SSH-TRANS và cho phép client tạo
những kênh kênh SSH-CONN khác chạy qua nó. Kênh được nhận dạng bằng số kênh và có
thể được tạo hoặc huỷ bỏ bởi client hoặc server. Kênh là một điều khiển lưu lượng riêng lẻ và
mỗi kênh có một kiểu kênh được định nghĩa theo mục đích sử dụng. Kiểu được định nghĩa
như sau:
- session: Đơn thuần chỉ là mở một kênh phiên chứ không bắt đầu chạy một chuơng trình.
Một phiên SSH-CONN có thể có nhiều kênh phiên, hỗ trợ đồng thời, ví dụ cùng chạy giao
thức truyền file và thực thi chương trình trên một phiên SSH-CONN.
- x11: một kết nối X11 client.
- orward-tcpip: một kết nối bên trong để chuyển tiếp một cổng ở xa. Khi một kết nối đến trên
một cổng TCP chuyển tiếp ở xa, server sẽ mở kênh này trở lại client để mang kết nối.
19
Nhóm 22 – Chuyên đề về SSH
- direct-tcpip: một kết nối TCP bên ngoài. Kết nối trực tiếp này đến mở một kết nối TCP ở
một socket định sẵn và thêm kênh đến kết nối đó. Socket có thể dùng một tên miền hoặc địa
chỉ IP.
5.5.2 Yêu cầu (request)
Thêm vào một dãy kênh hoạt động- mở, đóng, gủi dữ liệu, gửi dữ liệu khẩn cấp,…
SSH-CONN định nghĩa một thiết lập cho yêu cầu với tính đầy đủ hoặc chỉ là một kênh bộ
phận. Một yêu cầu đầy đủ ảnh hưởng đến toàn bộ trạng thái của kết nối trong khi một yêu cầu
kênh (bộ phận) chỉ được mở một kênh cụ thể.
Yêu cầu đầy đủ là:
tcpip-forward: yêu cầu một cổng chuyển tiếp TCP đằng xa

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ế

không thể đưa nhiều địa chỉ khác nhau đến một server.
weaker integrity checking: SSH-1 sử dụng phương thức kiểm tra toàn vẹn không mạnh lắm,
đó là thuật toán CRC-32.
server keys: Tiến trình trao đổi khoá cố định của SSH-1 giao cho một khoá bất đối xứng gọi
là server key, server key là một cặp khoá public/private tạm thời, sau một giờ lại được phục
hồi và sử dụng để cung cấp tính kín đáo chuyển tiếp cho khoá phiên. Kín đáo chuyển tiếp
nghĩa là thậm chí việc bảo mật thời gian dài như khoá bí mật host hoặc user được thoả hiệp
trễ, không dùng mã hoá phiên SSH trong các bước trước đó, sử dụng một khoá này thì nó
không bao giờ được ghi lên đĩa. Thuật toán Diffe-Hellman dùng trong tất cả quá trình trao đổi
khoá của SSH-2 cung cấp tính bí mật chuyển tiếp bởi chính nó vì thế không cần server key.
weak key exchange: Tiến trình trao đổi khoá SSH-1 bảo mật không cao vì chỉ một mình
client chọn khoá phiên và gửi đến server.
6. Các thuật toán được sử dụng trong SSH
6.1 Những thuật toán khóa công khai
6.1.1 Rivest-Shamir-Adleman (RSA)
Thuật toán khóa public RSA là kiểu tính toán không đối xứng được sử dụng rộng rãi
nhất. Nó bắt nguồn từ sự phân tích thành thừa số của nhiều số nguyên là tích của 2 số nguyên
tố gần bằng nhau.
Sự phân tích thành thừa số được tin dùng rộng rãi vì sự phức tạp, mặc dù chưa được
chứng minh. RSA có thể được dùng cả cho việc mã hóa và chữ ký. Đến tháng 9 năm 2000,
RSA được yêu cầu cấp bằng sáng chế tại Mỹ bởi Public Key Partners Inc (PKP), một công ty
mà RSA Security Inc là một đối tác. Khi bằng sáng chế có hiệu lực, PKP muốn kiểm soát
việc sử dụng thuật toán RAS ở Mỹ, và việc sử dụng trái phép là phạm luật. Đến giữa những
năm 1990, RSA Security cung cấp miễn phí RSAref, với bản quyền cho phép ngành giáo dục
21
Nhóm 22 – Chuyên đề về SSH
và thương mại sử dụng (cũng như phần mềm được bán ra phi lợi nhuận). Từ đó RSA trở nên
phổ biến, RSAref không còn tồn tại.
Giao thức SSH-1 chỉ sử dụng RSA. SSH-2 có thể sử dụng nhiều thuật toán public-
key, nhưng mặc định chỉ là thuật toán DSA. Nhóm SECSH đã thêm thuật toán RAS vào

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.

Giao thức SSH-2 cần phải dùng thuật toán Diffie-Hellman trong phương thức trao đổi khóa.
6.2 Những thuật toán khoá bí mật
6.2.1 Thuật toán mã hoá dữ liệu bí mật quốc tế (IDEA)
IDEA được thiết kế năm 1990 bởi Xuejis Lai và James Massey và trải qua nhiều lần
sửa chữa, cải tiến và đổi tên trước khi có dạng như hiện nay. Mặc dù tương đối mới nhưng nó
là thuật toán bảo mật khá tốt. Những trang web có thể tìm thông tin về nó là:
/> />6.2.2 Chuẩn mã hoá tiên tiến (AES)
Năm 1997, NIST bắt đầu một chương trình thay thế thuật toán mã hoá đối xứng chuẩn đang
có là DES. Thuật toán này được thiết kế bởi Joan Daemen và Vincent Rijmen và ban đầu nó
được gọi là Rijndael và sau trở thành Advanced Encryption Standard (AES). AES là một
23
Nhóm 22 – Chuyên đề về SSH
thuật toán mã hoá khối bí mật với chiều dài khoá có thể là 128, 192, hoăc 256 bits. Website
tham khảo: />6.2.3 Chuẩn mã hoá dữ liệu (DES)
Chuẩn mã hoá dữ liệu là bản cũ của thuật toán mã hoá bí mật và bây giờ nó được thay
thế bằng AES. DES được thiết kế bởi các nhà nghiên cứu của IBM vào đầu những năm 1970
với cái tên la Lucifer
6.2.4 Trible-DES (3DES)
Trible DES hoặc 3DES là một dạng khác của DES dùng để tăng tính bảo mật bằng
việc tăng chiều dài khoá. Làm tăng tính bảo mật của thuật toán DES bằng việc mã hoá nhiều
3 lần những khoá độc lập. Là thuật toán mã hoá dạng plantext với sự lặp lại thuật toán DES 3
lần. Chiều dài khoá của 3DES là 112 bit lớn hơn nhều so với 56 bit của DES.
6.2.5 ARCFFOUR (RC4)
Ron Rivest thiết kế thuật mã hoá RC4 năm 1987 cho bảo mật dữ liệu RSA. Lúc đó nó
có tên là RSADSI. Năm 1994, nó được biết đến với tên RC4 hay ARCFOUR. RC4 thì mã
hoá rất nhanh nhưng không bảo mật bằng những thuật toán khác. Nó sử dụng kích thước
khoá biến đổi. SSH-1 áp dụng RC4 với chiều dài khoá 128 bit.
6.2.6 Blowfish
Blowfish được thiết kế bởi Bruce Schneier năm 1993, nó từng bước thay thế thuật
toán DES. Nó nhanh hơn DES và IDEA nhiều nhưng không bằng RC4, Blowfish là một thuật

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

Boselaers và Bart Preneel trong một phần của dự án RIPE truyền thông Châu Âu từ tháng 6
năm 1987 đến tháng 12 năm 1995. RIPEMD-160 không được định nghĩa trong giao thức
SSH nhưng nó được dùng trong bản bổ sung OpenSSH, RIPEMD-160 cũng là một thuật toán
phiễn phí cho mọi người, Có thể tham khảo thêm tại:
/>6.3.5 Thuật toán nén: Zlib
Zlib là thuật toán nén dữ kiệu duy nhất được định nghĩa cho SSH. Website tham khảo:
/>7. Các loại tấn công mà SSH có thể cản được
7.1 Eavesdropping
Một eavesdropper là một người rình mò trên mạng, có thể biết được giao thông mạng
mà không làm ảnh hưởng đến đường truyền. Hình thức mã hóa của SSH chống lại
25

×