SaQura .NET · v1.0.13 · NuGet

SaQura 暗号ライブラリ

はじめに

SaQura は AES-256-GCM、RSA-4096、パスワードハッシュ、ポスト量子暗号を提供します。処理はアプリ内でローカルに実行され、第三者へデータは送信されません。名前空間: SaQura.

パッケージ: NuGet · SaQura. Kotlin・Swift・Python・JS/TS SDK とバイト互換(上のタブ参照)。

動作環境

  • フレームワーク: .NET 8.0+
  • プラットフォーム: Windows x64, Linux x64/ARM64, macOS (Intel/ARM), Android, iOS (.NET MAUI)
  • メモリ: PQC の鍵生成は計算負荷が高いため、モバイルでは Gen6 を推奨。

インストール

dotnet add package SaQura

ライセンスがない場合、SaQura は Free モード(透かし、PQC は 100 バイト制限)で動作します。ライセンスで全機能が解放されます。

ライセンス有効化

オプション A:ライセンスキー(オンライン)

using SaQura;

var result = await ApiLicense.ActivateLicenseAsync("PRO-XXXX-XXXX-XXXX-XXXX");

if (result.Success)
{
    Console.WriteLine($"License active: {ApiLicense.CurrentTier}");
}

オプション B:標準ライセンスファイル

using SaQura;

var result = await ApiLicense.ActivateLicenseFileAsync("license.lic");
if (result.Success)
{
    Console.WriteLine("License activated!");
}

オプション C:配布ライセンス(App/Play Store)

// MauiProgram.cs — activate license at startup (background)
Task.Run(async () =>
{
    if (ApiLicense.IsLicensed) return;
    using var stream = await FileSystem.OpenAppPackageFileAsync("license.lic");
    using var reader = new StreamReader(stream);
    var json = await reader.ReadToEndAsync();
    var result = await ApiLicense.ActivateLicenseFromJsonAsync(json);
});

アプリバインディング(任意・無料):ご希望に応じて、配布ライセンスをお客様のアプリに紐付けます——パッケージ名またはバンドル識別子(Android・iOS・macOS・Windows)に、さらに Android・Windows・macOS デスクトップでは署名証明書にも紐付けます。これにより、抽出されたライセンスファイルを他のアプリで有効化することはできません。アプリの識別情報は OS によって確認され、SDK 側で強制されます。バインディングには対応する SDK バージョンが必要で、ライセンス発行時にご案内します。Linux には OS が保証するアプリ識別情報がないため、その場合は非バインドのライセンスを発行します。バインド済みライセンスについてはお問い合わせください。

ライセンス状態の確認

if (ApiLicense.IsLicensed)
{
    Console.WriteLine($"Tier: {ApiLicense.CurrentTier}");
    Console.WriteLine($"Days remaining: {ApiLicense.GetDaysRemaining()}");
    Console.WriteLine($"AES: {ApiLicense.IsAESAvailable}, Quantum: {ApiLicense.IsQuantumAvailable}");
}

API リファレンス

Quantum 世代

自己記述的な世代ヘッダー(暗号アジリティ、後方互換)。Gen2〜7 は BSI 推奨プロファイル、Gen8 は X25519 + ML-KEM(NIST FIPS 203)を追加。

世代説明用途
Gen4FrodoKEM-1344 + AES-GCM汎用(推奨)
Gen6モバイル最適化モバイル/端末上
Gen7RSA+量子ハイブリッド重要インフラ(Pro+)
Gen8X25519 + ML-KEM(FIPS 203)量子耐性(Pro+)

ポスト量子署名

NIST FIPS 204(ML-DSA)および FIPS 205(SLH-DSA)準拠の署名。署名は Pro 以上、検証は全プラン。

主要クラス

ApiLicense, AES, RSAKey, Quantum, QuantumSignature, PasswordHasher, StreamingExtensions.

コード例

AES 暗号化

using SaQura;

var key = AES.GenerateAESKey();
var encrypted = await AES.EncryptAsync("Secret message", key);
var decrypted = await AES.DecryptAsync(encrypted, key);

パスワードベース暗号化

using SaQura;

var salt = AES.GenerateSalt();                       // store with the data
var key  = AES.DeriveKeyFromPassword("user_password_123", salt);
var encrypted = await AES.EncryptAsync("Sensitive data", key);

var key2 = AES.DeriveKeyFromPassword("user_password_123", salt);
var decrypted = await AES.DecryptAsync(encrypted, key2);

RSA + デジタル署名

using SaQura;
using System.Text;

var (privateKey, publicKey) = await RSAKey.NewKeyPairAsync();

var data = Encoding.UTF8.GetBytes("Document to sign");
var signature = await RSAKey.SignAsync(data, privateKey);
var isValid = await RSAKey.VerifyAsync(data, signature, publicKey);

量子耐性暗号化(Pro+)

using SaQura;

var generation = Quantum.GetRecommendedGeneration(
    isMobile: false, requiresHighestSecurity: false);

var (publicKey, privateKey) = Quantum.GenerateKeyPair(
    QuantumStrength.Standard, generation);

パスワードハッシュ

using SaQura;

var hash = await PasswordHasher.HashPasswordAsync("MySecurePassword123!");
var ok = await PasswordHasher.VerifyPasswordAsync("MySecurePassword123!", hash);

大容量ストリーミング

一定メモリで任意サイズのファイルを暗号化 — 約 2GB の制限なし。独自の SQS1 フォーマット、完全に追加的(1.0.10 以降)。

  • 2 つのスイート(自動):AES-256-GCM ChaCha20-Poly1305
  • セグメントごとに改ざん検知
  • PQC エンベロープ(Pro+):ファイル単位の鍵を SaQura の PQC 鍵でラップ → GDPR 暗号シュレッディング。
  • ティア:ストリーミングは Standard 以上、PQC エンベロープは Pro 以上。
using SaQura;

await StreamingExtensions.EncryptFileAsync(
    "input.mp4", "input.mp4.enc", key,
    suite: StreamCipherSuite.AesGcm);

await StreamingExtensions.DecryptFileAsync(
    "input.mp4.enc", "output.mp4", key);

SQS1 フォーマットは全 SaQura SDK でバイト一致です。サンプル: saqura-samples

ベストプラクティス

鍵管理

  • 鍵をハードコードしない。
  • 定期的に鍵をローテーションする。
  • プラットフォームのセキュアストレージ(Keychain、KeyStore、DPAPI)を使う。
  • 秘密鍵とライセンスファイルは機密情報として扱う。

エラー処理

try
{
    var encrypted = await AES.EncryptAsync(plainText, key);
}
catch (LicenseException ex)   // feature not in current tier
{
    Console.WriteLine($"License error: {ex.Message} (Feature: {ex.Feature})");
}
catch (CryptographicException ex)
{
    Console.WriteLine($"Crypto error: {ex.Message}");
}

トラブルシューティング

「License validation failed」

ライセンスファイルが破損/改変されています。新しい .lic を読み込むか お問い合わせフォーム へ。

ライセンスエラー/機能が利用不可

その機能が現在のプランで有効になっていません(AES は Standard、PQC は Pro 以上)。制限付き API を呼ぶ前に currentTier を確認してください。

ご質問は お問い合わせフォーム まで — バージョン、プラットフォーム、概要をご記載ください。暗号鍵はサポート問い合わせに含めないでください。