Tất cả những gì bạn cần biết về Mã hóa trong Java



Bài viết này sẽ cung cấp cho bạn kiến ​​thức chi tiết và toàn diện về Mã hóa trong Java và Cách sử dụng nó với Ví dụ.

Mã hóa là phương pháp sử dụng các thuật toán toán học để ngụy trang ý nghĩa của một phần thông tin để chỉ các bên được ủy quyền mới có thể giải mã được. Trong bài viết này, chúng tôi sẽ thảo luận về Mã hóa và Giải mã trong Theo thứ tự sau:

Giới thiệu về Mã hóa trong Java

Mã hóa được triển khai để bảo vệ dữ liệu của chúng tôi (như tin nhắn văn bản, cuộc trò chuyện bằng giọng nói của quảng cáo), có thể là trên máy tính hoặc được gửi trên Internet. Các công nghệ mã hóa gần đây là yếu tố thiết yếu của bất kỳ môi trường máy tính an toàn nào.





Vai trò chính của bảo mật mã hóa nằm ở khả năng của một thuật toán để tạo ra bản mã (văn bản được mã hóa) mà rất khó để hoàn nguyên về bản rõ ban đầu của nó. Việc sử dụng các khóa cũng tạo ra một mức độ bảo mật khác đối với các phương pháp bảo vệ thông tin của chúng tôi. Khóa là một số thông tin, chỉ cho phép những người nắm giữ nó mã hóa và giải mã một thông điệp.

Mã hóa và giải mã trong Java



Thuật toán mã hóa đối xứng

Các thuật toán đối xứng sử dụng cùng một khóa để mã hóa và giải mã. Các thuật toán như vậy chỉ có thể hoạt động ở chế độ khối (hoạt động trên các khối dữ liệu có kích thước cố định) hoặc chế độ dòng (hoạt động trên các bit hoặc byte dữ liệu). Các thuật toán như vậycũng thường được sử dụng cho các ứng dụng như mã hóa dữ liệu, mã hóa tệp và mã hóa dữ liệu được truyền trong mạng truyền thông (như TLS, email, tin nhắn tức thì, v.v.)

Thuật toán mã hóa không đối xứng (hoặc khóa công khai)

Không giống như các thuật toán đối xứng, sử dụng cùng một khóa cho cả hoạt động mã hóa và giải mã, các thuật toán bất đối xứng sử dụng hai khóa giống nhau cho hai bước này. Các thuật toán này được sử dụng để tính toán chữ ký số và các giao thức thiết lập khóa. Tuy nhiên, điều này cũng đi kèm với một thách thức là cần phải sử dụng hai phím khiến mọi thứ trở nên phức tạp hơn.



Để định cấu hình bất kỳ lược đồ mã hóa cơ bản nào một cách an toàn, điều rất quan trọng là tất cả các tham số như vậy (ở mức tối thiểu) phải được thiết kế chính xác:

  • Chọn đúng thuật toán là quan trọng.
  • Chọn chế độ hoạt động phù hợp cho nhiệm vụ thích hợp
  • Chọn sơ đồ đệm phù hợp theo yêu cầu
  • Chọn đúng phím và kích thước của chúng cho phù hợp
  • Khởi tạo chính xác với CSPRING bảo mật bằng mật mã.

Điều rất quan trọng là phải biết cấu hình tất cả các tham số này một cách an toàn. Ngay cả một cấu hình sai nhỏ cũng có thể gây nguy hiểm cho toàn bộ hệ thống tiền điện tử và mở nó cho các cuộc tấn công từ tin tặc và phần mềm độc hại khác. Do đó, để giữ cho cuộc thảo luận này đơn giản, chúng ta hãy chỉ thảo luận về các khởi tạo không phụ thuộc vào thuật toán của một Mật mã. Thay vì tự mình thực hiện các mã hóa như vậy, tốt hơn hết hãy để các chuyên gia thực hiện công việc định cấu hình nhiều cấu hình phụ thuộc vào thuật toán hơn, như giá trị p và q của thuật toán RSA, v.v. tá, các lớp được sử dụng.

Sự ra đời của các cấu trúc phân cấp lớp, rất nhiều phương thức / hàm tạo bị quá tải, v.v., thêm nhiều phức tạp, khiến nó trở nên không cần thiết. Tôi ước gì Java không làm phức tạp các cấu hình cơ bản và sẽ chỉ sử dụng một kiến ​​trúc đơn giản hơn như của Microsoft, nơi tất cả các tham số như vậy nằm trong chu vi của một lớp SymmetricAlgorithm và AsymmetricAlgorithm. Đối với ba tham số đầu tiên được chỉ định (thuật toán, phương thức hoạt động và lược đồ đệm), một đối tượng Mật mã sử dụng một chuỗi biến đổi.

  • Chọn đúng thuật toán

Một chuỗi biến đổi chắc chắn bao gồm tên của một thuật toán mật mã. Giữa mã hóa đối xứng và không đối xứng, có 11 thuật toán (không liên quan đến các kết hợp PBEWithAnd khác nhau), có thể được chỉ định theo Tài liệu Tên thuật toán Chuẩn. Trong số đó, chỉ có hai (một cho mỗi mã hóa đối xứng và không đối xứng) thực sự được bảo mật hoàn toàn.

.innerhtml làm gì

Các thuật toán còn lại hoặc bị hỏng quá mức (DES, RC2, v.v.) hoặc các vết nứt bắt đầu xuất hiện (RC5), khiến nó có thể bị phá vỡ với đủ năng lượng CPU - nó có thể bị phá vỡ vào thời điểm bạn đọc thông tin này. Một nhà phát triển quan tâm đến bảo mật không được đọc nhiều thông số kỹ thuật của NIST, cũng như không theo dõi các diễn biến và nghiên cứu mới nhất trong cộng đồng mật mã. Họ có thể chọn các thuật toán bị hỏng hoặc rủi ro, thông báo hoặc trình tạo giả ngẫu nhiên.

Luôn dành cho:

  1. Thuật toán đối xứng: Mật mã khối AES / AESWrap được sử dụng.

  2. Thuật toán không đối xứng: RSA được sử dụng.

  • Phương thức hoạt động

Phương thức hoạt động là một phần của phép biến đổi và chỉ liên quan đến mật mã khối. Khi chúng tôi sử dụng mật mã không đối xứng, hãy sử dụng ECB làm phương thức hoạt động, về cơ bản đây là một vụ hack hậu trường, nghĩa là bỏ qua giá trị này. Các nhà cung cấp Java như SunJCE, SunPKCS11 mặc định ở chế độ ECB cho các thuật toán đối xứng và bất đối xứng. Nó có thể là một điều tốt đối với các thuật toán bất đối xứng, nhưng lại là một ý tưởng tồi đối với các mật mã khối.

Các nhà cung cấp có thể được hướng dẫn đặt mặc định an toàn dựa trên thuật toán được sử dụng. Sử dụng mã hóa đối xứng để giúp bạn tránh khỏi các cuộc tấn công phát lại hoặc các cuộc tấn công đã biết rõ bản rõ. Ngoài ra, hãy sử dụng một phép chuyển đổi, chỉ định đầy đủ một thuật toán (tức là với phương thức hoạt động và phần đệm của nó). Đừng bao giờ làm điều gì đó giống như điều được đề cập bên dưới.

Như trên, thuật toán AES sẽ được sử dụng với chế độ hoạt động của ECB, làm cho các cuộc tấn công phát lại rất dễ dàng. Đối với sự phát triển mới, nếu có khả năng sửa đổi công việc cũ là nhỏ nhất, chúng ta nên sử dụng mã hóa xác thực với chế độ dữ liệu liên kết (AEAD) (Ví dụ: GCM và CCM). Chúng tôi có một thẻ xác thực với độ dài 128 bit đầy đủ. Nếu chúng tôi sử dụng chế độ chưa xác thực, chúng tôi sử dụng CBC hoặc CTR với MAC để xác thực bản mã.

  • Chọn sơ đồ đệm thích hợp

Các chế độ mật mã khối phổ biến cần độ dài của văn bản thuần túy là bội số của kích thước khối của thuật toán mã hóa cơ bản, điều này hiếm khi xảy ra. Vì vậy, chúng tôi yêu cầu một số đệm.Chương trình Java cung cấp cho chúng ta ba lược đồ khác nhau để mã hóa đối xứng, một là Không đệm, không thể chấp nhận được và một là ISO10126Padding đã bị thu hồi từ năm 2007).

Do đó, lựa chọn phù hợp duy nhất là sử dụng PKCS5Padding. Sự kết hợp của một số chế độ hoạt động (ví dụ như chế độ CBC) và sơ đồ đệm PKCS5Padding có thể dẫn đến các cuộc tấn công padding oracle. Không đề cập đến một sơ đồ đệm sẽ nguy hiểm hơn so với việc cung cấp một sơ đồ chỉ dễ bị tấn công bởi một số kiểu tấn công nhất định. Chế độ hoạt động của AEAD được khuyến khích nhất để đảm bảo rằng bạn được bảo vệ trước các cuộc tấn công này.

  • Thuật toán không đối xứng

Trong các thuật toán không đối xứng, chúng tôi có tùy chọn chọn trong số hai lược đồ đệm. Điều quan trọng là đảm bảo rằng chỉ các lược đồ OAEPWithAndPadding được sử dụng. Trong trường hợp có thông báo, vui lòng sử dụng SHA1 hoặc SHA256 / 384/512. Đối với Chức năng Tạo Mặt nạ (MGF), vui lòng sử dụng đệm MGF1 như được chỉ định. PKCS1Padding với RSA đã dễ bị tấn công Ciphertext [6] kể từ năm 1998.

Ở đây chúng ta nói về cách chính xác để sử dụng một phép chuyển đổi trong phương thức “Cipher.getInstance”.

  • Mã hóa đối xứng

  • Mã hóa không đối xứng

Chia tách làm gì trong java

Mức độ bảo mật của bất kỳ sơ đồ mã hóa nào cũng tỷ lệ thuận với kích thước của khóa của nó. Độ dài khóa phải đủ dài để bất kỳ cuộc tấn công bạo lực nào nó trở nên không khả thi đồng thời nó cũng phải đủ ngắn để lưu ý đến tính khả thi trong tính toán. Ngoài ra, chúng ta phải cố gắng xem xét những gì vẫn còn chịu được những tiến bộ về tính toán trong 30 năm tới.

Với điều này, chúng ta đến phần cuối của bài viết Mã hóa trong Java. Tôi hy vọng bạn có một ý tưởng về Mã hóa và Giải mã và tại sao nó được sử dụng trong Java.

Kiểm tra của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo và cấp chứng chỉ về Java J2EE và SOA của Edureka được thiết kế cho sinh viên và các chuyên gia muốn trở thành Nhà phát triển Java. Khóa học được thiết kế để cung cấp cho bạn khởi đầu về lập trình Java và đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog “Mã hóa trong Java” này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.