เอกสารทางเทคนิค

สถาปัตยกรรมระบบ

ศึกษาเชิงลึกเกี่ยวกับสถาปัตยกรรมที่ให้ความสำคัญกับความเป็นส่วนตัวของ NuDefndr การใช้งานจริง โค้ดที่ตรวจสอบได้

ภาพรวมระบบ

ไปป์ไลน์การประมวลผลบนอุปกรณ์

┌──────────────────────────────────────────────────────────────────┐ │ NUDEFNDR ANALYSIS FLOW │ └──────────────────────────────────────────────────────────────────┘ USER PHOTO LIBRARY (iOS Photos.framework) │ ├─> [PhotoLibraryService: Fetch PHAssets] │ ├─ Incremental Scan (timestamp-based skipping) │ └─ Target: Last 24h / 7d / 30d / 90d / All │ ▼ BATCH PROCESSING QUEUE │ ├─> [Device-Aware Concurrency] │ ├─ A17+ Devices: 6 concurrent analyses │ ├─ A15/A16: 3 concurrent analyses │ └─ Older: Sequential processing │ ▼ APPLE ML FRAMEWORK (iOS 18+) │ ├─> [SensitiveContentAnalysis.framework] │ ├─ On-device Neural Engine processing │ ├─ Binary classification (sensitive/safe) │ └─ Zero network activity (verified) │ ▼ RESULTS PIPELINE │ ├─> [Ephemeral Cache - RAM only] │ ├─ Results not persisted │ └─ Cleared on app termination │ ▼ USER REVIEW │ └─> [User Action: Move/Copy/Ignore] ├─ Move to Vault → Encrypt + Remove from Photos ├─ Copy to Vault → Encrypt + Keep in Photos └─ Mark Safe → Exclude from future scans ┌──────────────────────────────────────────────────────────────────┐ │ PRIVACY GUARANTEES │ └──────────────────────────────────────────────────────────────────┘ ✓ Zero network requests during analysis ✓ No cloud uploads (all processing local) ✓ Results not logged or persisted ✓ Memory cleared after analysis ✓ Apple's privacy-first ML framework

NEURAL ENGINE

การประมวลผล ML แบบเร่งด้วยฮาร์ดแวร์บนชิป A12+ ไม่มีโอเวอร์เฮด CPU ระหว่างการวิเคราะห์

SANDBOXED

iOS App Sandbox ป้องกันการรั่วไหลข้อมูล คำขอเครือข่ายถูกบล็อกระหว่างการวิเคราะห์

INCREMENTAL

การข้ามประทับเวลาอัจฉริยะวิเคราะห์เฉพาะรูปภาพใหม่/แก้ไขในการสแกนซ้ำ

ซอร์สโค้ด

เอ็นจิ้นสแกนแบบเพิ่มหน่วย

> /Services/ScanManager.swift Smart Timestamp Skipping (v2.0+)
/// Incremental scanning with timestamp-based skip logic
/// Delivers 5-15x performance gains on repeated scans
func performIncrementalScan(range: ScanRangeOption) async throws {
    guard let lastScanDate = getLastSuccessfulScanDate() else {
        // First scan - analyze everything
        return try await fullScan(range: range)
    }
    
    var skippedCount = 0
    var analyzedCount = 0
    
    for asset in photoAssets {
        // SKIP LOGIC: Photo hasn't been modified since last scan
        if let modDate = asset.modificationDate,
           modDate < lastScanDate {
            skippedCount += 1
            continue // Skip this photo (already analyzed)
        }
        
        // Analyze photo (new or modified since last scan)
        let result = try await analyzer.analyze(asset)
        analyzedCount += 1
        
        if result.isSensitive {
            await notifyUser(asset)
        }
    }
    
    #if DEBUG
    print("[Incremental] Analyzed: \(analyzedCount), Skipped: \(skippedCount)")
    print("[Performance] Skip ratio: \(Double(skippedCount)/Double(total) * 100)%")
    #endif
    
    // Update timestamp for next scan
    saveLastSuccessfulScanDate(Date())
}

/// Performance metrics (real-world data)
/// v1.7 (Full Scan): 28.4s for 20 photos
/// v2.x (Incremental): 1.9s for 20 photos (99% cache hit)
/// Improvement: 15x faster, 87% battery savings

การสแกนแบบเพิ่มหน่วย

  • วิเคราะห์เฉพาะรูปภาพใหม่/แก้ไข
  • ตรรกะการข้ามตามประทับเวลา
  • ประหยัดเวลาอย่างมากในการสแกนซ้ำ
  • ใช้แบตเตอรี่น้อยลง
  • การใช้หน่วยความจำที่มีประสิทธิภาพ

ตรรกะการข้าม

  • การเปรียบเทียบประทับเวลาที่รวดเร็ว
  • การติดตามวันที่แก้ไข
  • การตรวจสอบขอบเขตช่วง
  • โอเวอร์เฮดการประมวลผลน้อยที่สุด
  • เหมาะสำหรับการใช้งานประจำวัน

การเข้ารหัสห้องนิรภัย

การเข้ารหัส ChaCha20-Poly1305

> /Vault/VaultCrypto.swift AEAD Cipher with Hardware Backing
import CryptoKit

/// ChaCha20-Poly1305 encryption for vault storage
/// Keys stored in iOS Keychain with Secure Enclave protection
final class VaultCrypto {
    
    /// Encrypts photo data with ChaCha20-Poly1305 AEAD
    static func encryptData(_ data: Data, key: SymmetricKey) throws -> Data {
        // ChaCha20-Poly1305 provides:
        // - Confidentiality (encryption)
        // - Authenticity (HMAC)
        // - Integrity (tampering detection)
        let sealedBox = try ChaChaPoly.seal(data, using: key)
        
        return sealedBox.combined // Nonce + Ciphertext + Tag
    }
    
    /// Decrypts vault photo
    static func decryptData(_ encryptedData: Data, key: SymmetricKey) throws -> Data {
        let sealedBox = try ChaChaPoly.SealedBox(combined: encryptedData)
        let decryptedData = try ChaChaPoly.open(sealedBox, using: key)
        
        return decryptedData
    }
    
    /// Generates 256-bit encryption key with entropy validation (v2.1.8+)
    static func generateVaultKey() throws -> SymmetricKey {
        let maxRetries = 3
        
        for attempt in 0..= 7.5 {
                return key
            }
            
            #if DEBUG
            print("[Crypto] Low entropy detected, retry \(attempt + 1)/\(maxRetries)")
            #endif
        }
        
        throw CryptoError.insufficientEntropy
    }
}

ทำไมต้อง CHACHA20-POLY1305?

  • เร็วกว่า AES บน ARM (ไม่ต้องใช้ AES ฮาร์ดแวร์)
  • การเข้ารหัสที่ตรวจสอบแล้ว (ตรวจจับการงัดแงะ)
  • ใช้โดย Signal, WireGuard, TLS 1.3
  • ต้านทานการโจมตีด้านเวลา
  • มาตรฐาน IETF (RFC 8439)

การปกป้องคีย์

  • คีย์ 256 บิต (2^256 การรวมกัน)
  • iOS Keychain ด้วยการสนับสนุนฮาร์ดแวร์
  • ไม่เคยเก็บแบบไม่เข้ารหัส
  • เฉพาะอุปกรณ์ (ไม่มีสำรองข้อมูล/ซิงค์)
  • การตรวจสอบเอนโทรปี (v2.1.8+)

ข้อมูลจำเพาะ

รายละเอียดทางเทคนิค

ส่วนประกอบ การใช้งาน ระดับความปลอดภัย
ML Framework Apple SensitiveContentAnalysis (iOS 18+) เร่งด้วยฮาร์ดแวร์
อัลกอริทึมการเข้ารหัส ChaCha20-Poly1305 AEAD คีย์ 256 บิต
การจัดเก็บคีย์ iOS Keychain (Secure Enclave) สนับสนุนด้วยฮาร์ดแวร์
การปกป้องไฟล์ .completeFileProtection การจัดเก็บที่ปลอดภัยของ iOS
ประสิทธิภาพการสแกน แบบเพิ่มหน่วย (v2.0+) พร้อมการข้ามประทับเวลา เร็วกว่า 15 เท่า
การประมวลผลพร้อมกัน รับรู้อุปกรณ์ (A17+: 6 เธรด, A15: 3, เก่ากว่า: 1) ปรับตัว
กิจกรรมเครือข่าย ไม่มี (100% ออฟไลน์) การเปิดเผยคลาวด์เป็นศูนย์
การตรวจจับ Jailbreak การวิเคราะห์ 10 เวกเตอร์พร้อมการให้คะแนนความเชื่อมั่น รับรู้แพลตฟอร์ม

โมเดลภัยคุกคาม

การรับประกันความปลอดภัย

ได้รับการปกป้อง

การยึดอุปกรณ์

ห้องนิรภัยเข้ารหัสขณะพัก ไม่สามารถอ่านได้โดยไม่มี FaceID

การสกัดกั้นเครือข่าย

กิจกรรมเครือข่ายเป็นศูนย์ รูปภาพไม่เคยออกจากอุปกรณ์

การละเมิดคลาวด์

ไม่มีที่เก็บข้อมูลคลาวด์ ทุกอย่างในเครื่อง

การแยกสำรองข้อมูล

คีย์ผูกกับอุปกรณ์ ไม่สามารถแยกจากสำรองข้อมูล

การเข้าถึงที่ไม่ได้รับอนุญาต

ต้องใช้ชีวมิติ + PIN ล็อคอัตโนมัติหลังจาก 30 วินาที

นอกขอบเขต

อุปกรณ์ที่ปลดล็อก

ห้องนิรภัยต้องใช้ FaceID เพิ่มเติมแม้โทรศัพท์จะปลดล็อก

การบังคับทางกายภาพ

ไม่สามารถป้องกันการปลดล็อกชีวมิติแบบบังคับได้

อุปกรณ์ที่ถูกเจลเบรก

โมเดลความปลอดภัย iOS ถูกบุกรุก (ตรวจพบ ไม่ถูกบล็อก)

OS zero-day

ช่องโหว่ iOS ที่ไม่ทราบ (ส่งผลกระทบต่อแอปทั้งหมด)

โค้ดที่ตรวจสอบได้

ความปลอดภัยแบบโอเพนซอร์ส

ตรวจสอบการอ้างสิทธิ์ของเรา

ส่วนประกอบความเป็นส่วนตัวหลักของ NuDefndr เป็น โอเพนซอร์สบน GitHub นักวิจัยด้านความปลอดภัยสามารถตรวจสอบอย่างอิสระ:

  • กิจกรรมเครือข่ายเป็นศูนย์ ระหว่างการวิเคราะห์ (ตรวจสอบได้)
  • • การใช้งานการเข้ารหัส ChaCha20-Poly1305
  • • อัลกอริทึมการสแกนแบบเพิ่มหน่วยและตรรกะการข้าม
  • • วิธีการตรวจจับ jailbreak
  • • การผสานรวม Keychain และวงจรชีวิตคีย์

สิ้นสุดการส่ง

สถาปัตยกรรมที่ให้ความสำคัญกับความเป็นส่วนตัว การใช้งานที่ตรวจสอบได้

← กลับไปที่หน้าหลัก