Khóa API và Khóa bí mật hoạt động như thế nào? Liệu có an toàn không nếu tôi phải chuyển API và khóa bí mật của mình cho ứng dụng khác?


136

Tôi mới bắt đầu nghĩ về cách hoạt động của khóa api và khóa bí mật. Chỉ 2 ngày trước, tôi đã đăng ký Amazon S3 và cài đặt Plugin S3Fox . Họ hỏi tôi cả Khóa truy cập và Khóa truy cập bí mật, cả hai đều yêu cầu tôi đăng nhập để truy cập.

Vì vậy, tôi tự hỏi, nếu họ hỏi tôi về chìa khóa bí mật của tôi, họ phải lưu trữ nó ở đâu đó phải không? Về cơ bản, đó có phải là điều tương tự như hỏi tôi về số thẻ tín dụng hoặc mật khẩu của tôi và lưu trữ nó trong cơ sở dữ liệu của họ không?

Làm thế nào là các khóa bí mật và các khóa api được cho là hoạt động? Họ cần bí mật như thế nào? Là những ứng dụng sử dụng các khóa bí mật lưu trữ nó bằng cách nào đó?

Câu trả lời:


90

Về cơ bản xây dựng trên những gì được nêu ở đây .

Đây là cách nó hoạt động: giả sử chúng ta có một hàm lấy một số từ 0 đến chín, cộng ba và nếu kết quả lớn hơn mười, trừ mười. Vì vậy f (2) = 5, f (8) = 1, v.v ... Bây giờ, chúng ta có thể tạo một hàm khác, gọi nó là f ', đi ngược lại, bằng cách thêm bảy thay vì ba. f '(5) = 2, f' (1) = 8, v.v.

Đó là một ví dụ về hàm hai chiều và nghịch đảo của nó. Về mặt lý thuyết, bất kỳ hàm toán học nào ánh xạ thứ này sang thứ khác đều có thể đảo ngược. Tuy nhiên, trên thực tế, bạn có thể tạo một hàm làm xáo trộn đầu vào của nó tốt đến mức khó có thể đảo ngược.

Lấy đầu vào và áp dụng chức năng một chiều được gọi là "băm" đầu vào và những gì Amazon lưu trữ trên hệ thống của họ là "băm" khóa bí mật của bạn. SHA1 là một ví dụ về loại chức năng "một chiều" này, nó cũng được tăng cường chống lại các cuộc tấn công.

Hàm HMAC xây dựng trên các hàm băm đã thiết lập để sử dụng khóa đã biết để xác thực chuỗi văn bản. Nó hoạt động như thế này:

  • Bạn lấy văn bản yêu cầu của bạn và khóa bí mật của bạn và áp dụng chức năng HMAC.
  • Bạn thêm tiêu đề xác thực đó vào yêu cầu của bạn và gửi nó đến Amazon.
  • Amazon tra cứu bản sao khóa bí mật của họ và văn bản bạn vừa gửi và áp dụng chức năng HMAC.
  • Nếu kết quả khớp, họ biết rằng bạn có cùng khóa bí mật.

Sự khác biệt giữa điều này và PKI là phương thức này là RESTful , cho phép số lượng trao đổi tối thiểu giữa hệ thống của bạn và máy chủ của Amazon.

Về cơ bản, đó có phải là điều tương tự như hỏi tôi về số thẻ tín dụng hoặc mật khẩu của tôi và lưu trữ nó trong cơ sở dữ liệu của họ không?

Có, mặc dù thiệt hại mà ai đó có thể gây ra với S3 dường như bị hạn chế trong việc làm cạn kiệt tài khoản của bạn.

Họ cần bí mật như thế nào? Là những ứng dụng sử dụng các khóa bí mật lưu trữ nó bằng cách nào đó?

Tại một số điểm, bạn sẽ phải tải khóa bí mật và với hầu hết các hệ thống dựa trên Unix, nếu kẻ tấn công có thể truy cập root, họ có thể lấy khóa. Nếu bạn mã hóa khóa, bạn phải có mã để giải mã nó và đến một lúc nào đó, mã giải mã phải là văn bản đơn giản để có thể được thực thi. Đây là vấn đề tương tự DRM có, ngoại trừ việc bạn sở hữu máy tính.

Trong nhiều trường hợp, tôi chỉ đặt các khóa bí mật trong một tệp có quyền hạn chế và thực hiện các biện pháp phòng ngừa thông thường để ngăn hệ thống của tôi bị root. Có một vài thủ thuật để làm cho nó hoạt động chính xác với hệ thống nhiều người dùng, chẳng hạn như tránh các tệp tạm thời, v.v.


14
"Lấy đầu vào và áp dụng chức năng một chiều được gọi là" băm "đầu vào và những gì Amazon lưu trữ trên hệ thống của họ là" hàm băm "của khóa bí mật của bạn" - Nếu Amazon lưu trữ HASH của khóa bí mật của bạn, thì nó như thế nào Amazon có thể HASH văn bản gửi cho họ không?
Franklin

21
Đầu tiên bạn nói "những gì Amazon lưu trữ trên hệ thống của họ là" băm "khóa bí mật của bạn" và sau đó "Amazon tìm bản sao của khóa bí mật". Những điều này dường như mâu thuẫn với nhau. Tôi tin rằng tuyên bố đầu tiên là sai.
Sean

3
Url này cho biết thêm chi tiết về việc triển khai Amazon S3 Auth - docs.aws.amazon.com/AmazonS3/latest/dev/S3_Authentication2.html
asyncwait

10
"Về mặt lý thuyết, bất kỳ hàm toán học nào ánh xạ thứ này sang thứ khác đều có thể đảo ngược" - Điều đó không đúng, hàm băm là ví dụ. nó rất dễ dàng để hiển thị giả sử chúng ta có một hàm biến các từ thành số, dựa trên tổng các giá trị (a = 1, b = 2, c = 3, v.v.). Ví dụ: "SO" sẽ là 18 + 14 = 32. Vì vậy, chúng tôi đã thay đổi SO thành 32 nhưng nếu tôi tiết lộ chức năng này cho ai đó và đưa cho anh ta số 32, không có cách nào anh ta có thể biết từ cơ bản của chúng tôi là "SO" hay "ZF" (26 + 6) hoặc một trong hàng chục khả năng khác
Leo

1
Theo tài liệu mà @asyncwait liên kết, amazon chắc chắn lưu trữ khóa bí mật của bạn, không chỉ là một hàm băm của nó. Trên thực tế, có vẻ như việc băm duy nhất đang diễn ra là bất cứ điều gì xảy ra bên trong chức năng HMAC
cowlinator

7

Mật mã khóa công khai được sử dụng để bảo vệ chống lại các cuộc tấn công rất cụ thể, một số trong đó là phổ biến. Nói tóm lại, đây là phép toán phức tạp cho phép người ta xác minh rằng tại cá nhân có cả cặp Khóa công khai và Khóa riêng trong khi chỉ biết khóa chung. Điều này rất khác với thẻ tín dụng hoặc mật khẩu tĩnh. Ví dụ: nếu bạn đang xác thực với máy chủ OpenSSH thì máy chủ đó không cần khóa riêng .

Lý tưởng nhất là nếu cơ sở dữ liệu API của Amazon bị xâm phạm, kẻ tấn công sẽ có một danh sách các khóa công khai và sẽ không thể truy cập API của người dùng bằng thông tin này. Tuy nhiên, các hệ thống lý tưởng không phải lúc nào cũng được đưa vào thực tế và tôi không biết chắc chắn liệu Amazon có bảo vệ chống lại vectơ tấn công này hay không, nhưng chúng nên như vậy.

Trong xác thực khóa công khai là thống kê miễn dịch với lực lượng vũ phu. Mật khẩu thường là những từ trong từ điển có thể bị phá vỡ tính tương đối nhanh. Tuy nhiên, khóa riêng là một số lượng lớn không dễ đoán. Nếu kẻ tấn công có khóa công khai thì chúng có thể thực hiện nhiều lần đoán "ngoại tuyến" trên một siêu máy tính, nhưng ngay cả khi đó sẽ mất rất nhiều thời gian và tiền bạc để phá khóa.


2
những không cần khóa riêng liên kết bị phá vỡ ngay bây giờ.
setzamora

@Joset đã cập nhật liên kết trỏ đến một bản sao trong máy quay ngược internet từ năm 2008
oligofren

1

AWS đã thiết kế thuật toán xác thực tùy chỉnh của riêng họ. v4 được phát hành vào năm 2014. Chi tiết được nêu ở đây: Yêu cầu xác thực (Chữ ký AWS phiên bản 4) . Một điểm quan trọng là yêu cầu không được ký với chính bí mật, nhưng với khóa ký được tạo bằng bí mật. Nó cũng sử dụng HMAC-SHA256 để ký.

Chữ ký thế hệ

Sử dụng các khóa bất đối xứng sẽ an toàn hơn vì AWS sẽ chỉ lưu trữ khóa chung thay vì bí mật, được lưu trữ bởi cả người dùng và AWS.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.