1. Trang chủ
  2. » Giáo Dục - Đào Tạo

SỬ DỤNG THUẬT TOÁN BCRYPT để MÃ HÓA MẬT KHẨU

14 159 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sử Dụng Thuật Toán Bcrypt Để Mã Hóa Mật Khẩu
Tác giả Phan Văn Chương, Trần Quốc Giang, Trần Bá Mạnh
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Nhập Môn An Toàn Thông Tin
Thể loại Báo Cáo
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 14
Dung lượng 716,14 KB

Nội dung

Điều này có nghĩa là, Nễu lỡ mật khẩu từ dịch vụ bạn đang sử dụng bị rò rỉ ra ngoài, sự ảnh hưởng không chỉ giới hạn đối với dịch vụ của bạn, mà những kẻ tấn công còn có thể truy cập trá

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

──────── * ───────

BÁO CÁO

MÔN: NHẬP MÔN AN TOÀN THÔNG TIN

SỬ DỤNG THUẬT TOÁN BCRYPT ĐỂ MÃ

HÓA MẬT KHẨU

Sinh viên thực hiện :Phan Văn Chương 20183490

Trần Quốc Giang 20183517 Trần Bá Mạnh 20183589

Hà Nội, tháng 06 năm 2021

Trang 2

MỤC LỤC

Trang 3

LÍ DO CHỌN ĐỀ TÀI

Trong thời đại hiện nay, bảo mật thông tin là vô cùng quan trọng Việc bị lộ thông tin xuất hiện tràn lan, đặc biệt là việc bị lộ mật khẩu Nếu mật khẩu người dùng

bị rò rỉ, Những kẻ tấn công có thể sử dụng tài khoản đăng nhập để giả mạo người dùng thực hiện nhiều dịch vụ khác nhau mà người dùng đang sử dụng từ ngân hàng cho đến các trang web mua sắm Ví dụ, trong cuộc điều tra do Keeper thực hiện, đã có 87% người từ 18 đến 30 tuổi đã phải tái sử dụng lại mật khẩu Điều này có nghĩa là, Nễu lỡ mật khẩu từ dịch vụ bạn đang sử dụng bị rò rỉ ra ngoài, sự ảnh hưởng không chỉ giới hạn đối với dịch vụ của bạn, mà những kẻ tấn công còn có thể truy cập trái phép vào bất kỳ dich vụ nào được sử dụng bởi người dùng đó

Cho dù chúng ta có cố gắng để thực hiện các biện pháp phòng ngừa nhưng cũng không thể đảm bảo cơ sở dữ liệu của mình là không thể xâm nhập Vì vậy, thay vì việc nghĩ cách làm sao để tăng tính an toàn cho cơ sở dữ liệu, chúng ta có thể mã hóa mật khẩu của mình để tội phạm mạng không thể giải mã được nó Để có thể mã hóa mật khẩu, chúng ta cần băm mật khẩu trước khi đưa nó vào database

Vậy tại sao lại sử dụng thuật toán Bcrypt thay vì MD5, 1 ? MD5 và

SHA-1 được chứng minh có đụng độ, nghĩa là 2 password khác nhau, khi hash bằng MD5 hoặc SHA-1 có thể ra cùng một chuỗi, vì vậy không thể lưu nó vào database được Thêm nữa, thuật toán Bcrypt tuy có hơi chậm hơn các thuật toán khác như MD5, nhưng đổi lại nó giải quyết được các vấn đề như hack từ điển… của các thuật toán khác do có thể đối phó được với cấp độ tiến hóa của vi xử lý máy tính.

Từ đó, chúng em quyết định thực hiện đề tài : “SỬ DỤNG THUẬT TOÁN BCRYPT ĐỂ MÃ HÓA MẬT KHẨU” để có thể bảo vệ mật khẩu không bị rò rỉ khi bị tội phậm mạng tấn công vào cơ sở dữ liệu

Trang 4

CHƯƠNG 1 PHÂN TÍCH ĐỀ TÀI

1.1 Bcrypt là gì ?

BCrypt là một thuật toán mã hóa mật khẩu được thiết kế bởi Niels Provos và David Mazières BCrypt được đánh giá là bảo mật và an toàn hơn so với MD5 và SHA bởi mỗi lần thực hiện băm nó lại cho một giá trị khác nhau, nó giải quyết được các vấn

đề như hack từ điển của các thuật toán khác do có thể đối phó được với cấp độ tiến hóa của vi xử lý máy tính, việc này khiến cho việc dò tìm mật khẩu trở nên khó hơn

1.2 Các quy trình trong Bcrypt để mã hóa mật khẩu

Để mã hóa mật khẩu, cần phải có hai thứ: salting và hashing

Hashing:

Hashing là một kỹ thuật rất quan trọng và có tính ứng dụng cực kỳ cao, đặc biệt trong lĩnh vực bảo mật

Hash ( hay còn gọi là “băm”) là quá trình biến đầu vào là một nội dung có kích thước, độ dài bất kỳ rồi sử dụng những thuật toán, công thức toán học để biến thành đầu ra tiêu chuẩn có độ dài nhất định Quá trình đó sử dụng những Hàm băm (Hash function) Hàm băm nhận vào một chuỗi có kích thước bất kỳ và xuất ra một chuỗi có

độ dài cố định

Vd: Giả dụ, bạn tải một video trên Youtube về, sau đó cho nó chạy qua hàm băm có tên MD5 sẽ trả về một chuỗi dài 32 ký tự, hoặc bạn tải một bức ảnh trên mạng

về, cho chạy qua hàm MD5, thứ bạn nhận được vẫn là một chuỗi dài 32 ký tự Thậm chí, nếu bạn cho chạy từ “apple” qua hàm hash MD5 kia, kết quả sẽ là “1f3870be274 f6c49b3e31a0c6728957f”, lại là một chuỗi có 32 ký tự Những thuật toán băm khác cũng hoạt động tương tự như vậy, bạn cho bất kỳ thứ gì vào hàm, đầu ra sẽ luôn là một chuỗi có độ dài nhất định

Tác dụng của Hash:

+ Kiểm tra sự toàn vẹn của tệp tin

Như đặc điểm của hàm băm, cùng một giá trị sẽ cho ra cùng một giá trị băm Vậy nên

ta có thể đối chiếu tệp tin ta tải trên mạng về với bản gốc bằng cách so sánh giá trị băm của chúng với nhau Nếu chúng có chung giá trị băm tức là tệp tin của bạn trùng với bản gốc, nếu không tệp tin của bạn đã bị sửa đổi hoặc bị hỏng Một số trường hợp, tệp tin của bạn tải về bị can thiệp bởi bên thứ ba trước khi đến thiết bị của bạn và chúng có thể cài mã độc vào tệp tin đó Việc kiểm tra giá trị băm giúp đảm bảo tệp tin của bạn

an toàn

+ Xác minh mật khẩu

Có một điều rất hay bạn nên biết, trong những thiết kế cơ sở dữ liệu hiện đại, thứ lưu trong đó không phải mật khẩu của bạn dưới dạng văn bản đơn thuần mà là giá trị hash của chúng Khi bạn nhập mật khẩu, mật khẩu của bạn sẽ được chạy qua hàm hash, sau

Trang 5

đó sẽ được so sánh với giá trị băm trong cơ sở dữ liệu để quyết định bạn có được chứng thực để sử dụng dịch vụ không Điều này làm giảm đáng kể thiệt hại khi cơ sở

dữ liệu bị tấn công, khi những gì bị lộ ra ngoài là những giá trị băm chứ không phải mật khẩu của bạn Để an toàn hơn, hệ thống còn thêm giá trị muối (salt) vào mật khẩu gốc của bạn, rồi cho chạy qua hàm băm, sau đó mới lưu vào cơ sở dữ liệu Vậy nên kể

cả khi giá trị băm của mật khẩu bạn bị lộ và bị giải mã, kẻ tấn công vẫn chưa thể có được mật khẩu thực sự của bạn do nó đã được thêm vào giá trị "salt"

Tuy vậy, hashing là chưa đủ, bởi vì các hàm băm luôn tạo ra cùng một kết quả cho một mật khẩu cụ thể, chúng có thể dự đoán được Nếu bạn chỉ băm mật khẩu, một tội phạm mạng có thể tìm ra mật khẩu ban đầu

Salting :

Salting là một khái niệm thường liên quan đến băm mật khẩu Về cơ bản, đó là một giá trị duy nhất có thể được thêm vào cuối mật khẩu để tạo ra một giá trị băm khác nhau Điều này thêm một lớp bảo mật cho quá trình băm, đặc biệt là chống lại các cuộc tấn công bạo lực Một cuộc tấn công bạo lực là nơi một máy tính hoặc botnet cố gắng mọi kết hợp có thể có của các chữ cái và số cho đến khi mật khẩu được tìm thấy

Salt là giá trị thu được sau khi salting, bằng cách thêm một salt vào cuối của một mật khẩu và sau đó băm nó, ta đã cơ bản phức tạp quá trình bẻ mật khẩu Nếu kẻ tấn công biết salt của mình, nó cơ bản vô giá trị Họ chỉ có thể thêm nó vào cuối mỗi biến thể mật khẩu mà họ đang cố gắng và cuối cùng tìm thấy nó

1.3 Độ bảo mật của Bcrypt

BCrypt là một hàm băm lấy tên kết hợp với: “B” xuất phát từ Blowfish Cipher, một mật mã khối đối xứng được phát triển vào năm 1993 bởi Bruce Schneier, được thiết kế như một thuật toán mã hóa nguồn mở và mục đích chung “Crypt” là tên của hàm băm mặc định đi kèm với hệ điều hành Unix

Hàm băm Crypt được viết với phần cứng Unix ban đầu, có nghĩa là vào thời điểm đó phần cứng không thể băm đủ mật khẩu mỗi giây để thiết kế ngược lại mật khẩu đã băm bằng cách sử dụng hàm Crypt Vào thời điểm phát triển, Crypt có thể băm ít hơn 10 mật khẩu mỗi giây Với phần cứng hiện đại, chức năng Crypt có thể được sử dụng để băm hàng chục nghìn mật khẩu mỗi giây Điều này làm cho việc phá mật khẩu được băm bằng Crypt trở thành một hoạt động dễ dàng đối với bất kỳ hacker nào trong thời đại hiện tại

BCrypt lặp lại trên cả Blowfish và Crypt bằng cách đưa ra một thuật toán băm thực sự trở nên chậm hơn trên phần cứng nhanh hơn Mật khẩu BCrypthashed mở rộng trong tương lai, bởi vì phần cứng cố gắng băm bằng BCrypt càng mạnh thì càng cần nhiều thao tác hơn Kết quả là, ngày nay hacker gần như không thể viết một đoạn mã thực hiện đủ số băm để khớp với một mật khẩu phức tạp bằng cách này

Bcrypt xuất phát từ mật mã khối Blowfish, sử dụng bảng tra cứu từ bộ nhớ để tạo ra giá trị băm Điều này đồng nghĩa với việc phải sử dụng một số dung lượng bộ

Trang 6

nhớ nhất định để tạo ra giá trị băm Việc này có thể được thực hiện trên CPU, nhưng

sẽ trở nên cồng kềnh hơn nhiều khi sử dụng GPU do hạn chế về bộ nhớ Bcrypt đã ra đời được 14 năm, dựa trên một mật mã có tuổi đời hơn 20 năm Nó đã được xem xét

và thử nghiệm kỹ càng và nhờ đó được coi như tiêu chuẩn cho việc băm mật khẩu

Nhược điểm :

Thực ra vẫn có một điểm yếu, đó là đơn vị xử lý FPGA Khi bcrypt bắt đầu được phát triển, mối đe dọa chủ yếu của nó là ASICs chuyên biệt được xây dựng nhằm mục đích chuyên tấn công các hàm băm Ngày nay những ASICs đó sẽ là GPUs

(phương thức tấn công bruteforce trên thực tế vẫn có thể chạy trên GPU, nhưng không hoàn toàn song song) có giá bán vừa túi tiền và lý tưởng đối với những quá trình đa luồng nhưng tấn công bruteforce

FPGAs (Field Programmable Gate Arrays) cũng tương tự như GPUs nhưng việc quản lý bộ nhớ lại rất khác Bruteforcing bcrypt có thể được thực hiện hiệu quả hơn trên những chip này so với trên GPUs, nhưng nếu mật khẩu dủ dài thì vẫn không thể bị phá bằng phương thức này

Trang 7

CHƯƠNG 2 QUY TRÌNH CÀI ĐẶT VÀ THƯ VIỆN

SỬ DỤNG

2.1 Quy trình cài đặt

Bước 1 : Đầu tiên, cài đặt thư viện bcrypt

Dùng đoạn code dưới đây để sử dụng bcrypt :

Bước 2 : Đặt giá trị cho saltRound

Việc đặt giá trị saltRound khá quan trọng Khi giá trị saltRound càng cao thì thời gian băm càng mất nhiều thời gian Ta phải chọn một số đủ cao để ngăn chặn cuộc tấn công của tội phạm mạng nhưng cũng phải vừa đủ nhỏ để người dùng không phải đợi quá trình băm mật khẩu quá lâu

Bước 3: Khai báo một biến mật khẩu bất kì

Bước 4 : Tạo salt

Trang 8

Chúng ta có thể salt và hash mật khẩu trong một hàm hoặc hai hàm riêng biệt Ở đây, chúng tôi tách salt và hash ra thành hai hàm

Hàm genSalt dưới đây dùng để tạo salt, được truyền vào hai tham số : saltRound, hàm Callback nếu có lỗi và salt trả về

Bước 5 : Hash mật khẩu

Ta thêm hàm hash mật khẩu vào trong hàm genSalt Chúng ta truyền vào hàm hash các tham số: mật khẩu cần mã hóa, salt và hàm Callback nếu có lỗi và hash trả về

Khi hash được trả về, chúng ta có thể lưu nó vào cơ sở dữ liệu của mình

Trang 9

2.2 Kết hợp salt và hash :

Chúng ta có thể kết hợp salt và hash lại thành một hàm như sau :

2.3 So sánh mật khẩu và hash:

Sau khi tạo hash và lưu vào database, khi người dùng đăng nhập và hệ thống của chúng ta, cần phải so sánh mật khẩu mà người dùng nhập vào và hash được lưu trong CSDL Sử dụng hàm compare của thư viện bcrypt để so sánh bằng cách truyền vào các tham số :

- Mật khẩu cần so sánh

- Hash được lưu trữ trong cơ sở dữ liệu

- Hàm Callback nếu có lỗi và kết quả so sánh ( trả về true nếu mật khẩu khớp với hash và trả về false nếu không )

Ví dụ:

Trang 10

2.4 Hoàn thiện code :

Đoạn code dưới đây được dùng để salt và hash mật khẩu của người dùng và lưu trữ nó vào PostgreSQL

Trang 11

So sánh hash được lưu trong PostgreSQL với mật khẩu được người dùng nhập:

Trang 12

CHƯƠNG 3 XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA

3.1 Kết quả chương trình minh họa

<Trình bày tổng quan về kết quả đạt được trong quá trình làm bài tập lớn trong chương trình minh họa, nêu qua những chức năng chính đã thực hiện được>

3.2 Giao diện chương trình

<Chụp các màn hình cho các chức năng quan trọng Mô tả chi tiết từng chức năng>

Trang 13

CHƯƠNG 4 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

4.1 Kết luận

Trong quá trình hoàn thành bài tập lớn, nhóm chúng em đã tiếp thu được nhiều kinh nghiệm đối với môn học An toàn thông tin, đặc biệt là việc mã hóa hóa mật khẩu người dùng để lưu trữ vào cơ sở dữ liệu Kết thúc đề tài bọn em đã có thể hiểu rõ hơn

về Bcrypt, tác dụng của hash và salt đối với việc mã hóa mật khẩu là quan trọng như thế nào, đồng thời tìm hiểu về cách so sánh mật khẩu của người dùng có trùng khớp với cơ sở dữ liệu hay không, từ đâu mà tội phạm mạng có thể tấn công được tài khoản của người dùng Bên cạnh đó, bọn em đã có thêm kĩ năng về làm việc nhóm hiệu quả hơn trong việc tìm hiểu đề tài, nghiên cứu tài liệu, phân công công việc hiểu quả cho các thành viên trong nhóm

4.2 Hướng phát triển

Về hướng phát triển của đề tài, nhóm chúng em dự định sẽ phát triển theo những hướng sau :

- Nghiên cứu thêm về thuật toán Bcrypt xem nó còn tồn tại những lỗ hổng nào, tìm hiểu thêm những phương pháp mới có thể mã hóa mật khẩu tốt hơn ngoài hash và salt

Trang 14

TÀI LIỆU THAM KHẢO

[1] https://viblo.asia/p/bcryptphuong-phap-ma-hoa-that-su-an-toan-cho-mat-khau-nguoi-dung-OeVKB4B2lkW

[2]

https://viblo.asia/p/hash-password-voi-salt-da-nau-an-la-phai-co-muoi-4dbZN4nq5YM

[3] https://xluffy.github.io/post/how-to-hash-store-password/

[4] https://heynode.com/blog/2020-04/salt-and-hash-passwords-bcrypt/

[5] https://dominhhai.github.io/vi/2016/02/nodejs-ecrypt-password-with-bcrypt/ [6] https://thienmaonline.vn/bcrypt-la-gi/

[7] https://codelearn.io/sharing/hash-la-gi-va-hash-dung-de-lam-gi

[8] https://auth0.com/blog/hashing-in-action-understanding-bcrypt/

[9]

https://itzone.com.vn/vi/article/co-thuc-su-an-toan-voi-authentication-va-authorization-mat-khau-co-nen-luu-o-dang-text/

[10] https://trankyphat.com/uncategorized/su-dung-ham-bam-de-bao-ve-mat-khau-hash-password-218/

[11]

[12]

Ngày đăng: 02/08/2021, 11:17

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w