Enterprise sürüm
Steganografi — Derinlemesine başvuru
Bir bakışta
“Bir bakışta” başlıklı bölümBu derin referans, NextPDF Enterprise steganografik kanalını belgeler. Kanal, bir TJ metin gösterme dizisinin sayısal kerning ayarlamalarının içine şifreli bir yük gizler. Dört genel sembolü vardır: SteganographyEncoder, SteganographyDecoder, SteganographyConfig ve SteganographyCapacity. Kodlayıcı, HKDF-SHA-256 ile bir anahtar türetir, yükü bir AEAD şifresiyle şifreler ve konum başına kerning ofsetleri döndürür. Kod çözücü, gözlemlenen ayarlamalardan veya ham bir içerik akışından süreci tersine çevirir.
Kanal, dahili belge sızıntısı izleme için tasarlanmıştır. Rakip düzeyinde steganografi değildir. Kodlanmış veriler yazdır-sonra-tara, PDF dönüşümü, yeniden doğrusallaştırma, içerik akışı yeniden yazımı veya kerning’i normalleştiren herhangi bir işlemle yok olabilir. NextPDF, bu kanal için herhangi bir sertifikaya sahip değildir ve hiçbir sertifika vermez. Bu sayfa uygunluğu değil, yeteneği ifade eder.
Kullanılabilirlik ve lisanslama
“Kullanılabilirlik ve lisanslama” başlıklı bölümBu yetenek NextPDF Enterprise (nextpdf/enterprise) ile birlikte gelir ve bir Enterprise katmanı lisans zarfıyla etkinleşir. Bu yetkilendirmeye sahip olmayan bir dağıtım, yeteneğin sınıflarını yüklemez. Sürümleri karşılaştırın ve bir lisans edinin.
Genel API yüzeyi
“Genel API yüzeyi” başlıklı bölümKanal, dört final sınıfı açığa çıkarır. SteganographyConfig yapıcısı ve onun effectiveMaxOffset erişimcisi dışında tüm giriş noktaları public static’tir. Destekleyici NextPDF\Enterprise\Security\Steganography\SteganographyEncryptionException, kodlayıcı tarafından fırlatılır; çağıran tarafından oluşturulan bir tür değildir.
| Symbol | Parameters | Default behavior | Returns | Throws or fails with | Notes |
|---|---|---|---|---|---|
SteganographyEncoder::encode | $payload, $text, $fontKey, $metrics (FontMetrics), $secretKey, $config (SteganographyConfig) | Boş $payload, [] döndürür; anahtar gücünü doğrular; şifreler; konum başına kerning ofsetlerini hesaplar. | array<int, float> (konum => 1/1000 em cinsinden ayarlama, AFM kuralı) | InvalidArgumentException (taban değerin altındaki anahtar); OverflowException (2 karakterden az metin veya kapasitenin üzerinde yük); SteganographyEncryptionException (AEAD hatası) | Sonucu NextPDF\Content\TextRenderer::buildTjArrayOperator()’a geçirin. API, AFM kuralı ayarlamaları döndürür; buildTjArrayOperator(), PDF TJ sayısal dönüşümünü gerçekleştirir (ISO 32000-2 sayıyı geçerli konumdan çıkarır). El ile yazan içerik akışı yazarları bu işaret kuralını korumalıdır. |
SteganographyEncoder::assertSecretKeyStrength | $secretKey | Taban değerden daha kısa bir anahtarı reddeder. | void | InvalidArgumentException (taban değerin altındaki anahtar) | Paylaşılan yazma yolu koruması, okuma yolunda da yansıtılır. |
SteganographyEncoder::MIN_SECRET_KEY_LENGTH | constant | Bayt cinsinden 128 bitlik anahtar uzunluğu taban değeri. | int (16) | Uygulanamaz | Kütüphane, entropiyi değil uzunluğu zorlar. |
SteganographyDecoder::decode | $observedAdjustments, $text, $fontKey, $metrics (FontMetrics), $secretKey, $config (SteganographyConfig) | Anahtar gücünü doğrular; sapmaları nicemler; blob’u yeniden oluşturur; AEAD ile şifre çözer. | `string | null(yük veya yanlış anahtarda ya da yük yokkennull`) | InvalidArgumentException (taban değerin altındaki anahtar) |
SteganographyDecoder::decodeFromContentStream | $contentStream, $fontKey, $metrics (FontMetrics), $secretKey, $config (SteganographyConfig) | Akışı belirteçlere ayırır, TJ dizilerinden metni ve ayarlamaları yeniden oluşturur, ardından decode’a devreder. | `string | null(yük veyaTJmetni yokken ya da şifre çözme başarısız olduğundanull`) | InvalidArgumentException (decode üzerinden taban değerin altındaki anahtar) |
SteganographyConfig::__construct | $bitDepth, $maxAdjustmentEmRatio, $cipher, $requirePdfACompatibility | Her argüman alanını doğrular; değiştirilemez bir değer nesnesi üretir. | SteganographyConfig örneği | InvalidArgumentException (geçersiz $bitDepth, $maxAdjustmentEmRatio veya $cipher) | readonly sınıf; dört argüman genel, tanıtılmış özelliklerdir. |
SteganographyConfig::effectiveMaxOffset | none | $maxAdjustmentEmRatio * 1000 döndürür; PDF/A uyumluluğu istendiğinde yarıya indirilir. | float (1/1000 em cinsinden ofset) | Uygulanamaz | Yarıya indirme, genişlik uyumsuzluğu tespit riskini azaltır. |
SteganographyConfig::CRYPTO_OVERHEAD | constant | Bayt cinsinden yük başına sabit şifreleme ek yükü. | int (32) | Uygulanamaz | 4 baytlık uzunluk, 12 baytlık nonce, 16 baytlık etiket. |
SteganographyCapacity::calculate | $text, $config (SteganographyConfig) | Ek yükten sonra metin için kullanılabilir yük baytlarını hesaplar. | int (metin çok kısa olduğunda 0) | Uygulanamaz | Kapasite, positions * bitDepth / 8 eksi ek yüktür. |
SteganographyCapacity::minimumTextLength | $payloadBytes, $config (SteganographyConfig) | Bir yük için asgari UTF-8 karakter sayısını hesaplar. | int (karakter sayısı) | Uygulanamaz | calculate’in tersidir. |
Sözcüğü sözcüğüne imzalar, her biri kaynak kökeniyle aşağıda verilmiştir.
public static function encode( string $payload, string $text, string $fontKey, FontMetrics $metrics, string $secretKey, SteganographyConfig $config = new SteganographyConfig(),): arraypublic static function assertSecretKeyStrength(string $secretKey): voidpublic const int MIN_SECRET_KEY_LENGTH = 16;public static function decode( array $observedAdjustments, string $text, string $fontKey, FontMetrics $metrics, string $secretKey, SteganographyConfig $config = new SteganographyConfig(),): ?stringpublic static function decodeFromContentStream( string $contentStream, string $fontKey, FontMetrics $metrics, string $secretKey, SteganographyConfig $config = new SteganographyConfig(),): ?stringpublic function __construct( public int $bitDepth = 1, public float $maxAdjustmentEmRatio = 0.02, public string $cipher = 'aes-256-gcm', public bool $requirePdfACompatibility = false,)public function effectiveMaxOffset(): floatpublic const int CRYPTO_OVERHEAD = 32;public static function calculate( string $text, SteganographyConfig $config = new SteganographyConfig(),): intpublic static function minimumTextLength( int $payloadBytes, SteganographyConfig $config = new SteganographyConfig(),): intDavranış sözleşmesi
“Davranış sözleşmesi” başlıklı bölümKodlayıcı, $text’i UTF-8 karakterlerine böler ve ardışık her karakter çifti için bir konum oluşturur. Her konum, bir veya iki olan $config->bitDepth bit taşır. Yük önce şifrelenir, ardından bir blob’a serileştirilir, sonra bir bit dizisine dönüştürülür. Her konum, bitlerini o karakter çiftinin doğal kerning değerine eklenen küçük, negatif olmayan bir ofset olarak kodlar.
Ofset, etkin azami ofsetin bir kesridir. Etkin azami ofset, $maxAdjustmentEmRatio * 1000 tasarım birimidir; $requirePdfACompatibility doğru olduğunda yarıya indirilir. Doğal kerning, $metrics’ten FontMetrics::getKernPair aracılığıyla okunur. Döndürülen eşleme seyrektir: nihai ayarlaması tam olarak sıfır olan bir konum atlanır.
Şifreleme, 32 baytlık bir anahtar türetmek için HKDF-SHA-256 kullanır. HKDF tuzu, gizli olmayan $fontKey’dir ve info etiketi sabit bir değişmezdir. Bu nedenle çağıranın $secretKey’i tek gizlilik sınırıdır. AEAD şifresi, $config->cipher ile seçilen aes-256-gcm veya chacha20-poly1305’tir; taze bir 12 baytlık nonce ve 16 baytlık bir etiketle openssl_encrypt üzerinden çalıştırılır. Serileştirilmiş blob, 4 baytlık büyük uçlu bir uzunluk, 12 baytlık nonce, şifreli metin ve 16 baytlık etikettir; bu sabit ek yük, 32 bayt olan CRYPTO_OVERHEAD’dir.
Kod çözücü, dönüşümü tersine çevirir. Gözlemlenen her ayarlamanın doğal kerning’den sapmasını hesaplar, etkin azami ofsete göre normalleştirir ve en yakın seviyeye nicemler. Blob’u yeniden birleştirir, uzunluk başlığını doğrular ve openssl_decrypt’i çağırır. Yanlış bir anahtar, eksik bir yük veya bozuk ayarlamalar AEAD kimlik doğrulamasının başarısız olmasına neden olur ve kod çözücü null döndürür. decodeFromContentStream, önce ham akışı NextPDF\Pro\Projection\ContentProjectionWriter::tokenize ile belirteçlere ayırır, her TJ dizisinden metni ve sayısal ayarlamaları yeniden oluşturur ve ardından decode’a devreder.
SteganographyCapacity::calculate, CRYPTO_OVERHEAD’i çıkardıktan sonra bir metin ve yapılandırma için kullanılabilir yük boyutunu bildirir; metin çok kısa olduğunda sıfır döndürür. SteganographyCapacity::minimumTextLength bunun tersidir: istenen boyutta bir yükü kabul eden en küçük UTF-8 karakter sayısı.
Uç durumlar ve hata modları
“Uç durumlar ve hata modları” başlıklı bölüm- Boş bir
$payload,encode’dan boş bir eşleme döndürür; hiçbir bayt yazılmaz ve anahtar gücü korumasına ulaşılmaz. - Boş olmayan bir yük için, ikiden az karaktere sahip bir
$text,encode’daOverflowExceptionfırlatır (boş bir yük, uzunluk kontrolünden önce[]’ye kısa devre yapar); aynı metin,decode’danullveSteganographyCapacity::calculate’te sıfır verir. - Metin kapasitesinden büyük bir
$payload, herhangi bir ayarlama yayınlanmadan önceOverflowExceptionfırlatır. MIN_SECRET_KEY_LENGTH’ten (16 bayt) daha kısa bir$secretKey, hem yazma hem de okuma yolundaInvalidArgumentExceptionfırlatır. Bu bir sözleşme ihlalidir ve normal bir yanlış anahtar ıskalamasından ayrıdır.- Yanlış bir anahtar, bozuk bir ayarlama kümesi veya kesilmiş bir blob,
decode’un bir istisna değil, AEAD kimlik doğrulama hatası aracılığıylanulldöndürmesine neden olur. - Seyrek bir
$observedAdjustmentseşlemesinden yoksun konumlar, çıkarma sırasında sıfır sapma olarak ele alınır. decodeFromContentStream, akış hiçbirTJmetni içermediğindenulldöndürür.- Kanal, tasarım gereği kırılgandır. Yazdır-sonra-tara, PDF dönüşümü, yeniden doğrusallaştırma, içerik akışı yeniden yazımı veya kerning normalleştirme, kodlanmış verileri yok edebilir. Rakip veya arşiv amaçlı kullanıma uygun değildir.
FIPS modu davranışı
“FIPS modu davranışı” başlıklı bölümKanal, anahtar türetme için HKDF-SHA-256 ve gizlilik ile bütünlük için bir AEAD şifresi kullanır. NextPDF, bu kanal için herhangi bir FIPS doğrulamasına sahip değildir ve hiçbir iddiada bulunmaz. Modül, bir FIPS profilini zorlamaz; şifre seçimi, $config->cipher aracılığıyla çağıranın kararıdır. aes-256-gcm, Galois/Counter Modunda AES’tir; NIST SP 800-38D §2 uyarınca uygunluğu CMVP altında doğrulanan onaylı bir 128 bitlik blok şifre üzerine kurulu, kimlik doğrulamalı bir şifreleme modudur. chacha20-poly1305, bir NIST işletim modu önerisiyle tanımlanmamıştır, bu nedenle FIPS kısıtlı bir OpenSSL sağlayıcısı bunu reddeder; openssl_encrypt bunun ardından false döndürür ve kodlayıcı SteganographyEncryptionException fırlatır. Bir dağıtımın bir FIPS gereksinimini karşılayıp karşılamadığı, bir NextPDF iddiası değil, operatörün doğrulanmış sağlayıcısına karşı belirlemesidir.
Uygunluk
“Uygunluk” başlıklı bölümGömme, bir TJ metin gösterme dizisine sayısal öğeler yazar. ISO 32000-2:2020 §9.4.3 uyarınca, bir TJ dizisi metni gösterir ve sayısal bir öğenin glif konumunu ayarlamasına izin verir; sayı, bir metin uzayı biriminin binde biri cinsinden ifade edilir ve geçerli konumdan çıkarılır. Bir glif boyandıktan sonra, metin matrisi birleşik yer değiştirmeyle ötelenir, böylece bir konumlandırma sayısı sonraki gliflerin yerleşimini kaydırır — ISO 32000-2:2020 §9.4.4. Kanal, ofsetlerini doğal kerning değerlerine, negatif bir değerin aralığı sıkılaştırdığı aynı 1/1000 em (AFM) kuralında ekler.
AEAD dayanağı, ilkel seçimiyle sınırlıdır: aes-256-gcm, NIST SP 800-38D §2’nin GCM moduna karşılık gelir. Bu referans bir algoritmayı tanımlar; bu kanalın bir doğrulaması değildir.
Tüm maddeler açımlanmıştır; NextPDF normatif metni yeniden üretmez. NextPDF, bu kanal için hiçbir steganografi, kriptografi veya PDF uygunluk iddiasında bulunmaz. TJ konumlandırma modeliyle yapısal hizalama, bir sertifika değil, bir yetenek ifadesidir. Dayanıklılık açıklaması geçerlidir: kanal dahili sızıntı izleme içindir ve rakip düzeyinde değildir.
Geliştirme notları
“Geliştirme notları” başlıklı bölüm- Giriş noktaları,
SteganographyConfigyapıcısı veeffectiveMaxOffsetdışında,NextPDF\Enterprise\Security\Steganographyiçindekipublic staticmetotlardır. SteganographyConfig, birfinal readonlydeğer nesnesidir. Dört özelliği yapımdan sonra değiştirilemez ve argüman alanları yapıcıda doğrulanır:$bitDepth1 veya 2’dir,$maxAdjustmentEmRatio(0, 0.05]aralığındadır ve$cipheraes-256-gcmveyachacha20-poly1305’tir.- encode çıktısı,
NextPDF\Content\TextRenderer::buildTjArrayOperatortarafından tüketilir. Kerning çiftleriNextPDF\Typography\FontMetrics’ten gelir. İçerik akışı kod çözme,NextPDF\Pro\Projection\ContentProjectionWriteraracılığıyla okur ve akışı değiştirmez. - Anahtar uzunluğu taban değeri, giriş noktasında zorlanır ve özel kripto sınırında yeniden doğrulanır, böylece hiçbir dahili yol zayıf bir anahtarla HKDF’ye ulaşamaz. Kütüphane, entropiyi değil uzunluğu zorlar; yüksek entropili anahtar malzemesi sağlamak entegratörün sorumluluğundadır.
CRYPTO_OVERHEAD(32 bayt), yük başına sabit maliyettir veSteganographyCapacity::calculatetarafından zaten çıkarılmıştır.- Belgelenen since, birleştirilmiş Enterprise yüzeyi için
3.1.0’dır.SteganographyEncryptionException,RuntimeException’ı genişletir, bu nedenle genel çalışma zamanı türünü yakalayan çağrı siteleri çalışmaya devam eder.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm- Steganografi (yetenek sayfası) — sızıntı izleme kanalının göreve yönelik genel bakışı.
- Güvenlik — Derin referans — kardeş Enterprise güvenlik yüzeyi.
- Lisanslama ve etkinleştirme — Enterprise lisans zarfının nasıl uygulandığı.
Yayın sınırı
“Yayın sınırı” başlıklı bölümBu sayfa yalnızca dışarıdan gözlemlenebilir davranışı ve desteklenen genel API yüzeyini belgeler. Dahili ad alanı yolları, yardımcı sınıflar, mekanizma tabloları, çalışma kitabı dosya adları ve bilet önekleri kapsam dışıdır.