Bouncy Castle لجافا: الدليل الشامل للتشفير والأمان
1. ما هي مكتبة Bouncy Castle ولماذا تحتاجها؟
Bouncy Castle (ويُشار إليها اختصارًا بـ BC) هي واحدة من أقوى وأوسع مكتبات التشفير استخدامًا لمنصة Java (و .NET). توفر للمطورين مجموعة شاملة من واجهات API لتنفيذ التشفير، التوقيعات الرقمية، التجزئة (Hashing)، توليد المفاتيح، والتعامل مع الشهادات الرقمية. على عكس ملحق التشفير القياسي Java Cryptography Extension (JCE)، تقدم Bouncy Castle دعمًا لعدد أكبر بكثير من الخوارزميات، بما في ذلك العديد من الخوارزميات القديمة والتجريبية والنادرة الاستخدام، مما يجعلها أداة لا غنى عنها لمتخصصي الأمان والمطورين الذين يعملون مع بروتوكولات غير تقليدية.
لماذا تحتاجها؟ أولاً، المكتبة القياسية لجافا (JCA/JCE) لا تتضمن العديد من الخوارزميات الحديثة والمتخصصة (مثل Twofish، Serpent، GOST، SM2/SM3/SM4). تسد Bouncy Castle هذه الفجوة. ثانيًا، توفر تطبيقًا "خفيف الوزن" (Lightweight API) لا يتطلب تثبيت مزود أمان (Provider) في JVM العامة، مما يجعله مناسبًا للأنظمة المدمجة والتطبيقات التي تتطلب العزل. ثالثًا، المكتبة مدعومة بنشاط، وتخضع لمراجعات أمنية، وتُعتبر المعيار الفعلي للعديد من مشاريع المصادر المفتوحة (مثل OpenSSL لجافا).
تتكون Bouncy Castle من مكونين رئيسيين: المزود (bcprov-jdk18on) الذي يتكامل مع بنية الأمان في Java، وحزم PKIX/CMS/SMIME/TLS (bcpkix-jdk18on، bcmail-jdk18on، bctls-jdk18on) التي تنفذ بروتوكولات عالية المستوى مثل S/MIME وTLS والتعامل مع شهادات X.509. ستركز هذه المقالة على جوهر المكتبة — المزود وواجهة API خفيفة الوزن الخاصة به.
2. كيفية تثبيت Bouncy Castle
يتم توزيع Bouncy Castle عبر Maven Central. لاستخدامها في مشروع Java (Maven، Gradle، SBT)، أضف التبعيات التالية إلى ملف البناء الخاص بك.
لـ Maven (pom.xml):
<!-- المزود الأساسي (إجباري) -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.78.1</version> <!-- تحقق من أحدث إصدار على mvnrepository.com -->
</dependency>
<!-- للتعامل مع الشهادات، CMS، S/MIME (اختياري) -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.78.1</version>
</dependency>
لـ Gradle (build.gradle):
implementation 'org.bouncycastle:bcprov-jdk18on:1.78.1'
implementation 'org.bouncycastle:bcpkix-jdk18on:1.78.1' // اختياري
ملاحظة مهمة: إذا كنت تستخدم إصدارات قديمة من Java (قبل 8)، فستحتاج إلى الإصدار bcprov-jdk15on. لـ Java 8+ استخدم bcprov-jdk18on. بعد إضافة التبعية، يجب تسجيل المزود في الكود (إذا كنت تستخدم واجهة JCE القياسية) أو العمل مباشرة مع واجهة API خفيفة الوزن.
3. بداية سريعة — مثال عملي بسيط
أبسط مثال: تشفير نص باستخدام خوارزمية AES-256 في وضع GCM (تشفير موثّق) عبر واجهة API خفيفة الوزن.
import org.bouncycastle.crypto.*;
import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.crypto.modes.GCMBlockCipher;
import org.bouncycastle.crypto.params.*;
import org.bouncycastle.util.encoders.Hex;
import java.security.SecureRandom;
public class QuickStart {
public static void main(String[] args) throws Exception {
// 1. توليد المفتاح و IV (متجه التهيئة)
SecureRandom secureRandom = new SecureRandom();
byte[] keyBytes