Розробка системи верифікації фізичних пристроїв DePIN

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка системи верифікації фізичних пристроїв DePIN
Складний
~1-2 тижні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

Розробка системи верифікації фізичних пристроїв DePIN

DePIN (Decentralized Physical Infrastructure Networks) — архітектура де реальне фізичне обладнання (сенсори, роутери, камери, майнери енергії) бере участь у децентралізованій мережі та отримує token-вознаграження за надані послуги. Центральна проблема: як убедитися, що конкретний token-адрес дійсно відповідає реальному фізичному пристрою, а не симулюється програмно?

Проблема верифікації фізичної присутності

Три класи атак

Spoofing атака: програмний агент емулює дані фізичного пристрою. GPS координати, показання сенсорів, network metrics — всё це можна синтезувати. Без hardware root of trust програмне spoofing невідрізнюване.

Clone атака: легітимний пристрій клонується — скопійовані ключі запускаються на декількох машинах одночасно. Одна фізична одиниця вознаграджується багато разів.

Sybil атака: один оператор реєструє сотні "пристроїв", які на справі — віртуальні інстанси на одному сервері. Особливо критично для мереж де вознаграження залежить від кількості нод.

Hardware Root of Trust

Рішення — криптографічний матеріал, що неможливо вилучити з пристрою без його фізичного знищення. Виробничі підходи:

TPM (Trusted Platform Module): стандарт ISO/IEC 11889. Зберігає private key у захищеному енклаві, підписує attestation звіти. Key ніколи не покидає TPM — операції відбуваються всередині чіпа. Підтримується в industrial IoT пристроях (Raspberry Pi 4 має опціональний TPM2.0 через GPIO).

Secure Element (SE): виділений мікроконтролер для криптографічних операцій. Використовується у смарт-картах, eSIM. Helium використовує ECC608 SE для верифікації Hotspot пристроїв.

TEE (Trusted Execution Environment): ARM TrustZone, Intel SGX. Ізольована середовище виконання всередині основного процесора. Дешевше окремого SE, але model атаки складніше (side-channel атаки на SGX задокументовані).

PUF (Physically Unclonable Function): унікальний "fingerprint" мікросхеми, визначений випадковими варіаціями виробничого процесу. Не можна клонувати фізично — кожен чіп дає унікальну відповідь на challenge. Emerging технологія, використовується у спеціалізованих IoT чіпах.

Архітектура системи верифікації

Provisioning (первинна реєстрація пристрою)

Виробник → Secure Element provisioning
   ↓
Генерація device keypair всередині SE
(private key ніколи не покидає пристрій)
   ↓
Створення Device Certificate (X.509)
Підписано CA виробника
   ↓
Certificate chain: Root CA → Intermediate CA → Device Cert
   ↓
On-chain реєстрація device публічного ключа + cert fingerprint

Виробник підписує device ідентичність своєю CA. Протокол може верифікувати автентичність пристрою через cert chain без довіри до виробника on-chain — потрібна тільки його CA key у trusted registry.

On-chain Device Registry

contract DeviceRegistry {
    struct Device {
        address owner;           // wallet власника
        bytes32 certFingerprint; // SHA-256 device certificate
        bytes publicKey;         // публічний ключ з SE
        uint256 registeredAt;
        bool active;
    }
    
    mapping(bytes32 => Device) public devices; // deviceId => Device
    mapping(address => bytes32[]) public ownerDevices;
    
    // Trusted список CA виробників
    mapping(bytes32 => bool) public trustedManufacturers;
    
    event DeviceRegistered(bytes32 indexed deviceId, address indexed owner, bytes publicKey);
    event DeviceTransferred(bytes32 indexed deviceId, address indexed from, address indexed to);
    
    function registerDevice(
        bytes32 deviceId,
        bytes calldata publicKey,
        bytes calldata deviceCertificate,
        bytes calldata manufacturerSignature
    ) external {
        // Верифікація cert chain (спрощено — повна реалізація off-chain)
        bytes32 certFingerprint = keccak256(deviceCertificate);
        
        require(
            verifyManufacturerSignature(deviceId, publicKey, manufacturerSignature),
            "Invalid manufacturer signature"
        );
        
        devices[deviceId] = Device({
            owner: msg.sender,
            certFingerprint: certFingerprint,
            publicKey: publicKey,
            registeredAt: block.timestamp,
            active: true
        });
        
        ownerDevices[msg.sender].push(deviceId);
        emit DeviceRegistered(deviceId, msg.sender, publicKey);
    }
}

Challenge-Response верифікація роботи

Реєстрація — разова подія. Але пристрій повинен регулярно доводити що він працює та саме цей пристрій відповідає.

// Smart contract видає challenge
async function issueChallenge(deviceId: string): Promise<Challenge> {
  const nonce = crypto.randomBytes(32);
  const timestamp = Math.floor(Date.now() / 1000);
  
  // Записуємо challenge on-chain (або off-chain з підписом оракула)
  await challengeContract.issueChallenge(
    deviceId,
    ethers.utils.keccak256(nonce),
    timestamp + CHALLENGE_EXPIRY
  );
  
  return { nonce: nonce.toString('hex'), expiry: timestamp + CHALLENGE_EXPIRY };
}

// Пристрій підписує challenge своїм SE приватним ключем
// (відбувається на пристрої, не у цьому коді)
function signChallengeOnDevice(challenge: string): string {
  // TPM2.0 PKCS#11 API:
  // const signature = tpm.sign(challenge, keyHandle);
  return signature;
}

// On-chain верифікація
async function submitChallengeResponse(
  deviceId: string,
  nonce: string,
  signature: string
): Promise<boolean> {
  const device = await deviceRegistry.devices(deviceId);
  
  // Відновлюємо ключ що підписав
  const recoveredKey = ethers.utils.recoverPublicKey(
    ethers.utils.hashMessage(nonce),
    signature
  );
  
  return recoveredKey === device.publicKey;
}

Proof of Location

Для DePIN мереж де важлива географічна розподіленість (IoT сенсори, wireless hotspots):

Radio-based proof (Helium підхід): пристрої верифікують місцезнаходження один одного через radio сигнали. Witness: якщо пристрій A чує пристрій B на правдоподібній відстані — верифікація присутності. Атака: вимагає фізично розставити пристрої у потрібні місця, не просто запустити VM.

GPS + TEE attestation: GPS координати підписуються TEE, не можуть бути змінені без фізичного доступу. Проблема: GPS spoofing атаки (особливо для outdoor пристроїв).

Cell tower triangulation + carrier verification: підтвердження місцезнаходження через мобільну мережу. Складніше spoofити, але вимагає SIM / eSIM.

Reward механізм з anti-cheat

contract DePINRewards {
    uint256 constant REWARD_PER_EPOCH = 1e18; // 1 token per epoch
    uint256 constant EPOCH_DURATION = 3600;   // 1 час
    
    struct DeviceStats {
        uint256 lastChallengeTime;
        uint256 successfulChallenges;
        uint256 currentEpoch;
        uint256 epochChallengesRequired; // скільки challenge потрібно в епоху
        uint256 epochChallengesPassed;
    }
    
    function claimReward(bytes32 deviceId) external {
        DeviceStats storage stats = deviceStats[deviceId];
        Device memory device = deviceRegistry.devices(deviceId);
        
        require(device.owner == msg.sender, "Not owner");
        require(device.active, "Device inactive");
        
        uint256 currentEpoch = block.timestamp / EPOCH_DURATION;
        require(currentEpoch > stats.currentEpoch, "Epoch not complete");
        
        // Перевіряємо uptime в епоху
        uint256 uptime = stats.epochChallengesPassed * 100 / stats.epochChallengesRequired;
        require(uptime >= MIN_UPTIME_PERCENT, "Insufficient uptime");
        
        // Reward пропорційно uptime
        uint256 reward = REWARD_PER_EPOCH * uptime / 100;
        
        stats.currentEpoch = currentEpoch;
        stats.epochChallengesPassed = 0;
        
        rewardToken.mint(msg.sender, reward);
    }
}

Staking та Slashing

Щоб збільшити cost of attack: пристрій при реєстрації повинен застейкати токени. При виявленні мошенництва (duplicate key usage, невідповідність claimed даних реальним) — stake slashиться.

Поведінка Реакція
Пропуск challenge Снизження uptime → менше reward
Duplicate key (clone) Автоматичний slash 100% stake
Неверні дані (sensor fraud) Slash + деактивація
Порушення geo-constraints Slash + ручна перевірка

Технічний стек

Слой Технологія
Hardware ідентичність TPM2.0 / ECC608 / TrustZone
Device attestation X.509 сертифікати + PKCS#11
On-chain registry Solidity + OpenZeppelin
Oracle / proof верифікація Chainlink Functions або власний
Off-chain indexer The Graph
Device firmware Rust (embedded) / Go для важких пристроїв
Backend Node.js / Go + gRPC

Часова шкала розробки

Фаза 1 (4-6 тижнів): on-chain device registry, challenge-response протокол, базовий reward механізм.

Фаза 2 (3-4 тижні): staking/slashing, anti-cheat оракул, admin tools.

Фаза 3 (4-6 тижнів): hardware provisioning tooling, firmware SDK для пристроїв, інтеграція з конкретним SE/TPM.

Фаза 4 (2-3 тижні): аудит smart contracts, нагрузкове тестування, testnet deployment.

Повний цикл: 3-4 місяці для production-ready системи. Вартість залежить від типу hardware та target мережі.