Băm mật khẩu sha256 python

Mặc dù chúng tôi đã kết hợp tính năng băm mật khẩu vào trang đăng ký của mình, nhưng tôi muốn dành chút thời gian để xem điều gì đang thực sự xảy ra. Có thể cuối cùng bạn sẽ làm việc bằng ngôn ngữ khác hoặc có thể passlib không hỗ trợ phiên bản Python bạn đang sử dụng trong tương lai. Do đó, bạn nên biết ít nhất ở cấp độ cao, cách thức hoạt động của nó

Nó không chỉ quan trọng đối với các hoạt động bảo mật, mà nó còn khá thú vị về cách thức hoạt động

Để bắt đầu, bạn có thể hiểu tại sao việc mã hóa mật khẩu lại quan trọng ngay từ đầu. Nếu cơ sở dữ liệu của bạn lưu trữ mật khẩu văn bản thuần túy, thì ít nhất, bạn sẽ tự mình nhìn thấy mật khẩu và bất kỳ ai có quyền truy cập vào máy chủ của bạn cũng vậy. Trong một thế giới hoàn hảo, không ai xâm phạm quyền riêng tư của người dùng, nhưng thế giới này không hoàn hảo. Không chỉ ai đó làm việc cho bạn có thể đánh cắp mật khẩu người dùng, tin tặc hoặc thậm chí máy chủ lưu trữ cho máy chủ của bạn có thể, nếu bạn đang sử dụng máy chủ riêng ảo hoặc dịch vụ lưu trữ được chia sẻ

Vì vậy, làm thế nào chúng ta có thể ẩn mật khẩu? . Vấn đề là, với mật khẩu, chúng tôi thực sự cần có khả năng xác thực những gì người dùng nhập trong tương lai dưới dạng mật khẩu ban đầu

Một trong những biện pháp nguyên thủy hơn được thực hiện là băm mật khẩu đơn giản. Đây là nơi hàm băm được áp dụng cho những gì người dùng nhập vào và hàm băm đó là thứ được lưu dưới dạng mật khẩu

Đây là một tập lệnh băm đơn giản để minh họa điều này, mà bạn có thể chạy

import hashlib
password = 'pa$$w0rd'
h = hashlib.md5[password.encode[]]
print[h.hexdigest[]]
		

Nhập hashlib, đặt mật khẩu mẫu, tạo đối tượng băm, in hàm băm

6c9b8b27dea1ddb845f96aa2567c6754

Vì vậy, nó hoạt động khá tốt. Nếu bạn chỉ thấy hàm băm đó trong cơ sở dữ liệu, bạn sẽ không biết ý nghĩa của nó. Tuy nhiên, vấn đề phát sinh với những điều sau đây. Chạy tập lệnh hai lần hoặc năm lần. Bạn sẽ thấy rằng đầu ra luôn giống nhau. Ban đầu, với sự xác thực trong tâm trí, bạn có thể nghĩ rằng đây không phải là một yêu cầu sao?

Vấn đề ở đây là mọi người đã tạo ra các bảng băm lớn, đặc biệt được gọi là bảng tra cứu hàm băm, nơi bạn chỉ cần tìm kiếm hàm băm, sau đó tìm mật khẩu văn bản thuần túy tương ứng. Bạn cũng có thể tự tạo một cái bằng cách chỉ tạo các giá trị băm cho các tổ hợp ký tự. Phải mất một chút thời gian để tạo các bảng,. Những bảng này lớn, nhưng không quá lớn để chứa trên máy tính xách tay hoặc netbook của bạn

Thay vào đó, những gì chúng ta cần là một cách để tạo các giá trị băm duy nhất, nhưng hãy tìm cách xác thực giá trị băm đó bằng cách chỉ hỏi liệu hai giá trị băm có đến từ cùng một đầu vào hay không, mặc dù là các giá trị băm rất khác nhau

Tuy nhiên, trước khi đến đó, mọi người đã nghĩ ra một giải pháp dễ dàng hơn. Tại sao không đặt một mẫu văn bản bí mật vào mỗi mật khẩu đã nhập, mà chỉ máy chủ chúng tôi biết. Đây là những gì được gọi là "muối. "

Muối, trong khi vẫn được sử dụng, ban đầu bắt đầu khá đơn giản. Đây là một ví dụ về cách hoạt động của muối, dựa trên ví dụ cuối cùng của chúng tôi

import hashlib

user_entered_password = 'pa$$w0rd'
salt = "5gz"
db_password = user_entered_password+salt
h = hashlib.md5[db_password.encode[]]
print[h.hexdigest[]]
		

Ở đây, sự khác biệt lớn duy nhất là chúng ta chỉ có một loại muối mà chúng ta thêm vào cuối cùng. Sau đó, bất cứ khi nào người dùng nhập mật khẩu của họ, chúng tôi sẽ thêm muối, băm nó và sau đó so sánh các giá trị băm đó

de6e389819bdaa9e0ca60bb52cabccae

Bây giờ, muối có thể được thêm vào bất cứ nơi nào. Có thể đầu vào ngay giữa, có thể ở đầu, có thể ở cuối. Mong bạn có một muối ở đầu, một muối khác ở giữa mật khẩu và một muối nữa ở cuối mật khẩu

Điều này khá tốt, nhưng vẫn có rủi ro cố hữu, và đây là lý do tại sao

Hàm băm luôn giống nhau cho cùng một mật khẩu. Điều này có nghĩa là nếu ai đó bẻ khóa cách bạn tạo muối, thì giờ đây họ đã bẻ khóa tất cả mật khẩu bằng cách tạo bảng băm. Điều này, một lần nữa, có thể mất nhiều công đoạn xử lý, nhưng điều này không có nghĩa là nằm ngoài tầm với của các tiêu chuẩn ngày nay

Một trong những câu ngạn ngữ về mã hóa là bạn không thể phụ thuộc vào bí mật để bảo mật. Một bài kiểm tra tốt cho khả năng mã hóa của bạn là tự hỏi bản thân. "Nếu ai đó phát hiện ra phương pháp mã hóa của tôi, bảo mật của tôi có bị xâm phạm không?" . " Đó là một vấn đề. Hãy xem xét rằng nhiều lý do tại sao ai đó có quyền truy cập vào cơ sở dữ liệu của bạn cũng có nghĩa là họ có quyền truy cập vào mã nguồn của bạn. Điều này có nghĩa là ai đó có thể tìm ra muối của bạn. Từ đây, việc phá vỡ toàn bộ cơ sở dữ liệu mật khẩu được mã hóa là tương đối nhanh chóng

Thay vào đó, những gì chúng tôi muốn là một cách để tạo các giá trị băm duy nhất, trong đó nguồn của chúng có thể được xác thực dễ dàng, nhưng cưỡng bức vũ phu sẽ yêu cầu cưỡng bức vũ phu cho mỗi mật khẩu, không phải cưỡng bức vũ phu cho toàn bộ cơ sở dữ liệu. Hãy mang theo những khẩu súng lớn với passlib

Nếu bạn chưa có passlib, điều mà bạn có thể không có vì nó không phải là một phần của thư viện chuẩn, hãy thực hiện nhanh

pip install passlib

hoặc là

sudo apt-get install python-passlib

Khi bạn có passlib, hãy chơi

from passlib.hash import sha256_crypt

password = sha256_crypt.encrypt["password"]
password2 = sha256_crypt.encrypt["password"]

print[password]
print[password2]

print[sha256_crypt.verify["password", password]]
		

Ở đây, chúng tôi đang mang đến khả năng băm của passlib và sử dụng SHA256 làm thuật toán. SHA256 vốn đã tốt hơn md5, nhưng bạn có thể tự do thay thế "md5" bằng "sha256" trong các ví dụ trên của chúng tôi để thấy hàm băm đầu ra vẫn giữ nguyên, chỉ lâu hơn một chút

Tiếp theo, chúng tôi cho thấy rằng chúng tôi sử dụng sha256_crypt từ passlib để băm "mật khẩu" hai lần. Một lần đến biến mật khẩu và một lần nữa đến mật khẩu2

Sau đó, chúng tôi xuất giá trị băm của cả hai, lưu ý rằng chúng khác nhau

Cuối cùng, chúng tôi xác thực rằng hai giá trị băm riêng biệt đến từ cùng một nguồn

Chắc chắn rồi, boolean đổ chuông Đúng, và chúng ta có một kết quả trùng khớp

Giờ đây, chúng tôi có một cách tuyệt vời để bảo vệ mật khẩu người dùng, trong khi vẫn có thể xác thực người dùng khi họ đăng nhập

Bây giờ, hãy xem xét các yêu cầu của tin tặc xâm phạm máy chủ của chúng tôi và giành quyền truy cập vào cả mã nguồn và cơ sở dữ liệu của chúng tôi. Họ có thể nhìn thấy mọi thứ, nhưng bây giờ thì sao?

Giờ đây, họ sẽ phải bẻ khóa mật khẩu bằng vũ lực, giống như trước đây, chỉ khác là bây giờ mỗi lần chỉ có một mật khẩu đơn giản. Rất tiếc. Những gì họ có thể làm là lấy từ điển mật khẩu của mình [thường là một danh sách lớn các mật khẩu có thể có], tạo một hàm băm, sau đó cố gắng xác thực hàm băm này đối với tất cả các mật khẩu trong cơ sở dữ liệu bằng cách lặp qua từng mật khẩu và chạy sha256_crypt. xác minh đối với họ để biết phản hồi Đúng/Sai. Tuy nhiên, quá trình này đặc biệt rườm rà và kết quả chậm. Điều này sẽ mất nhiều thời gian và không có cách nào để chuẩn bị trước ở đây. Bạn có thể nghĩ, họ không thể chuẩn bị bằng cách tạo các hàm băm SHA256 nâng cao?

Tại thời điểm tôi viết bài này, không có điểm yếu nào được biết đến đối với phương pháp này

Bây giờ, tôi muốn nhấn mạnh việc sử dụng "phương pháp" ở trên. Tồn tại một sự khác biệt lớn giữa một phương pháp và ứng dụng của phương pháp

Một câu ngạn ngữ khác về mã hóa và bảo mật nói chung giống như

"Bạn có thể có cánh cửa được gia cố chắc chắn nhất, không thể xuyên thủng nhất trên hành tinh để bảo vệ một căn phòng, nhưng điều đó chẳng ích gì nếu những bức tường vẫn yếu. "

Thật đơn giản để quên đi những bức tường, trần nhà hay thậm chí là mặt đất

Hãy xem xét bao nhiêu lần bạn đã viết logic của một chương trình, nghĩ rằng nó chắc chắn, sau đó nhấn một lỗi và đi "tất nhiên rồi. "Bạn sẽ mắc lỗi liên tục, và bạn có thể biết rằng mình mắc lỗi rất nhiều. Với bảo mật, những lỗi này thường không được kiểm tra, chưa được kiểm tra. Hãy cố gắng hết sức để suy nghĩ như một hacker, nhưng hãy luôn nhớ rằng *mọi* hệ thống, được kết nối với mạng toàn cầu, đều có thể bị hack. Chỉ cần chấp nhận nó, và làm việc trên tiền đề đó

Chấp nhận rằng passlib có thể có sai sót và một ngày nào đó, hoặc rồi, ai đó biết được một sai sót trong SHA256. Ngoài ra, rất nhiều hệ thống mã hóa mật khẩu bị tin tặc vượt qua với quyền truy cập máy chủ cực kỳ đơn giản

Nếu tin tặc giành được quyền truy cập vào máy chủ của bạn và thấy rằng cơ sở dữ liệu của bạn được mã hóa an toàn, chúng có thể thực hiện một việc đơn giản như tạo chức năng ghi nhật ký trên biểu mẫu đăng nhập của bạn, nơi nó chỉ lưu những gì người dùng đã nhập vào trường, trước khi băm, . Điều này rõ ràng không tuyệt vời bằng việc lấy toàn bộ cơ sở dữ liệu cùng một lúc, nhưng điều này lại xảy ra

Nhiều người cũng đặt nhiều niềm tin vào những thứ như 2FA [xác thực hai yếu tố]. Tôi ghét làm vỡ bong bóng của bạn, nhưng, trong khi phương pháp này rất có ý nghĩa, việc áp dụng phương pháp này của cả bạn, khách hàng và trang web bạn sử dụng có ý nghĩa rất lớn

Bản thân là một nhà phát triển, tôi đã thiết lập 2FA một vài lần. Có nhiều tùy chọn bạn có thể chọn khi cài đặt 2FA có thể tăng hoặc cản trở bảo mật. Ví dụ: một trang web ví bitcoin cụ thể, rất phổ biến, sử dụng lại khóa công khai cho 2FA của bạn. Tôi phát hiện ra điều này khi tôi thay đổi điện thoại. Kết quả ở đây là ai đó có thể tạm thời truy cập vào điện thoại của bạn, truy cập vào tài khoản của bạn, xác thực lại 2FA và bạn sẽ không nhận thấy bất kỳ thay đổi nào trên thiết bị của mình. Họ đang tái chế các khóa công khai để tạo mã. Bây giờ họ chỉ đợi bạn gửi một số tiền lớn, và sau đó họ đưa bạn đi. Bạn sẽ không bao giờ biết bạn thậm chí còn dễ bị tổn thương. Nếu tin tặc cũng có thể giả mạo cookie phiên của bạn thì đây là một cách khác mà chúng có thể thực hiện và chúng thậm chí không cần mã của bạn. Phiên giả mạo là khá khó, nhưng vẫn có thể. Đây là lý do tại sao các trang web thường yêu cầu bạn nhập lại mật khẩu khi thực hiện thay đổi bảo mật trên tài khoản của bạn. Trang web ví bitcoin phổ biến này?

Cửa an toàn đẹp, nhưng tường yếu

Một ví dụ tuyệt vời khác về lỗi 2FA là khi mọi người sử dụng 2FA thông qua một thứ gì đó như Google. Tuyệt vời, nhưng nếu tài khoản gmail mà bạn đã thiết lập 2FA với Google Authenicator cũng không được bảo vệ bằng 2FA, thì bạn đã hỏng rồi

Cửa lớn, tường yếu

Cuối cùng, trước khi khiến bạn cảm thấy dễ bị tổn thương, tôi sẽ giải quyết điểm yếu nhất đối với tất cả các doanh nghiệp và máy chủ

Những người điều hành chúng

Mắt xích yếu nhất luôn là con người. Cho dù đó là do họ phạm sai lầm hay vì họ có thể dễ dàng bị xã hội hóa, thì con người thường là mục tiêu chính hoặc ít nhất là lý do dẫn đến các lỗ hổng

Tôi thậm chí không thể đếm được có bao nhiêu trang web mà tôi đã thấy bị tấn công, bởi vì ai đó đã giả làm quản trị viên và có thể truy cập được. Nghe có vẻ ngu ngốc, nhưng trò lừa đảo này rất dễ mắc phải, đặc biệt khi xem xét thế giới chúng ta đang sống ngày nay, nơi các nhà phát triển phân tán và thường không phải tất cả đều là người địa phương. Cá nhân tôi đã từng là nạn nhân của phiên bản thành công này, tôi đã có những nhà phát triển trang web trở thành hacker và tôi đã có vô số nỗ lực. Đó là những gì tin tặc làm, họ hack. Họ tiếp tục cố gắng, và cuối cùng họ có thể vượt qua. Công việc của bạn là làm cho nó trở nên khó khăn nhất có thể

Nó giống như hầu hết tội phạm. Hầu hết các tội phạm là tội phạm cơ hội, công việc của bạn là không phải là đứa trẻ chậm nhất, béo nhất, béo nhất chạy trốn khỏi con gấu

Chủ Đề