2010-04-09 70 views
5

Tôi đang cố gắng lấy AES HMAC của một tệp bằng cách sử dụng chương trình dòng lệnh openssl trên Linux. Tôi đã xem các trang của người đàn ông nhưng không thể tìm ra cách thành công trong việc tạo ra HMAC. Tôi có thể mã hóa một tập tin bằng cách sử dụng lệnh enc với openssl tuy nhiên tôi dường như không thể tạo ra HMAC. Mã hóa trông như sau:openssl hmac sử dụng aes-256-cbc

openssl enc -aes-256-cbc -in plaintext -out ciphertext 

Bất cứ lời khuyên hoặc hướng dẫn sẽ là tuyệt vời

Trả lời

9

Bạn có thể được hỏi về CBC-MAC. Cho rằng, tôi nghĩ rằng bạn chỉ cần mã hóa tin nhắn hoặc tập tin của bạn với một IV 0 và sau đó lấy khối cuối cùng (16 byte cho AES256-cbc). I found a blog post mô tả làm thế nào để làm điều này với OpenSSL:

openssl enc -e -aes-256-cbc -KABCDEF -iv 0000000000000000 < file | tail -c 16 | od -A n 
  • -K là nơi bạn cung cấp chìa khóa của bạn, mà trang wiki nói cần phải khác với những gì bạn đang sử dụng để mã hóa các tập tin, nếu bạn mã hóa nó.
  • -iv rõ ràng cung cấp tất cả IV bằng không, là chìa khóa cho CBC-MAC.
  • tail -c 16 là nhận khối AES256-cbc cuối cùng dài 16 byte.
  • od là chuyển đổi thành hex, trang web mà trang web nói là phổ biến. Nếu không, thay vì od -A n, bạn có thể làm base64 nếu điều đó có thể áp dụng nhiều hơn hoặc để nó hoàn toàn để chỉ có các byte thô.

Bạn không thể lấy một AES HMAC của một tập tin vì AES256-CBC là một thuật toán mã hóa khối, không phải là một thuật toán băm. AES256-cbc là để mã hóa và giải mã một tệp. HMAC là để xác minh tính toàn vẹn của tập tin và yêu cầu một thuật toán băm ở lõi của nó như SHA-1 hoặc MD5.

Bạn đang cố gắng ký hoặc xác minh tệp hoặc mã hóa tệp? Để ký tên, hãy xem lệnh OpenSSL dgst và sử dụng các HMAC đơn giản như MD5 hoặc SHA-1 hoặc đi hết và ký điện tử với DSS/DSA.

Ngoài ra, tôi tin rằng việc sử dụng mật mã khối như MAC được gọi là EMAC, nhưng OpenSSL không thực hiện EMAC theo như tôi biết. EMAC chỉ lấy khối cuối cùng của một tệp được mã hóa và mã hóa nó để tạo một MAC.

+0

Có lẽ tôi đã bỏ lỡ câu hỏi ban đầu của mình; Tôi cần MAC của một văn bản mã hóa AES. Điều này có mang lại cảm giác mã hóa hơn không? Tôi tin rằng MAC của AES chỉ là khối được mã hóa cuối cùng, phải không? – Ryan

+0

@Ryan: Tôi đã thêm một số thông tin về CBC-MAC. Hy vọng nó giúp. Nếu đó không phải là những gì bạn có nghĩa là một trong hai, có lẽ bạn có thể cung cấp cho nền tảng hơn về lý do tại sao bạn cần phải tính toán này AES MAC. Đây có phải là một phần của giao thức nổi tiếng không? Bạn sẽ làm gì với nó khi bạn tính toán nó? Thông tin cơ bản rộng hơn có thể giúp người khác nhảy vào và cung cấp câu trả lời. – indiv

+0

Đây là * chính xác * những gì tôi cần. Rất cám ơn indiv !!!! – Ryan

2

Bạn có thể thực hiện HMAC của tệp bằng cách sử dụng khóa AES làm đầu vào cho HMAC.

Mã hóa tệp bằng bất kỳ thuật toán AES nào bạn muốn (trong ví dụ này -aes-256-cbc); tạo khóa AES dựa trên mật khẩu (thay đổi "mật khẩu" thành mật khẩu của bạn) và sử dụng công tắc -p để đổ muối, khóa và iv được sử dụng để mã hóa.

openssl enc -e -k password -p -aes-256-cbc -in plaintext -out ciphertext 
salt=A2402067B9BFD4A1 
key=EB3A88115C30F26C3987F1AB2577DF5B58C80EBEEA623506517FAD843C64E1FC 
iv =B382453BCBF579CE14C0726D343F40E2 

Tạo một HMAC của bất kỳ đối tượng/file sử dụng một thuật toán hash của bạn lựa chọn và phím AES đã được sử dụng để mã hóa các tập tin:

openssl dgst -hmac EB3A88115C30F26C3987F1AB2577DF5B58C80EBEEA623506517FAD843C64E1FC -sha256 ciphertext 
HMAC-SHA256(ciphertext)= fa3fb9c9c743f35ba81793e2704c3fc9737cd2675011110cb1655ea7ceed2914 

Ghi phím AES để sử dụng sau này nếu bạn cần xác minh HMAC. Lưu ý rằng tôi không biết những gì bạn đang cố gắng thực hiện và tôi không thể yêu cầu các yêu cầu mã hóa ở trên, nhưng nó cho thấy cách mã hóa một tệp, lấy khóa mã hóa và sử dụng khóa mã hóa đó trong tính toán HMAC.

Các vấn đề liên quan