24/7 pohotovosť
0948 626 682Vojtěch Kavan, špecialista na forenznú obnovu dát, DATARECOVERY • 20.04.2026
Moderný NAND flash na opravu chýb používa kódy LDPC (Low-Density Parity-Check) namiesto starších BCH (Bose-Chaudhuri-Hocquenghem). Prechod na ne si vynútil nástup 3D TLC a QLC pamätí, pri ktorých je chybovosť čítania na úrovni surových dát taká vysoká, že si s ňou BCH už neporadí. V sfére záchrany dát metódou chip-off však všetky dostupné nástroje, či už ide o PC-3000 Flash od ACE Lab, VNR od Rusolut alebo Flash Extractor od Soft-Center, pracujú výhradne s BCH. Firmvér radiča, v ktorom je LDPC implementované, je pritom v zásade reverzne analyzovateľný, a je teda na mieste sa pýtať, prečo chip-off dekodér pre LDPC neexistuje. Na vine je celý rad dôvodov, tak principiálnych, ako aj rýdzo praktických.
LDPC vytlačilo BCH z praktického dôvodu: dokáže dekódovať s veľmi malou rezervou voči teoretickému limitu Shannonovej medze. Táto schopnosť stojí a padá s tým, že dekodér nedostáva len nuly a jednotky, ale pre každý bit aj údaj o tom, aký spoľahlivý je prečítaný výsledok. Túto mieru spoľahlivosti vyjadruje log-likelihood pomer (LLR), teda logaritmus pomeru pravdepodobností, že bit je nula, a že je jednotka. Čím ďalej od nuly, tým istejšie čítanie.
Chip-off čítačka však nič také neposkytuje. Každú bunku prečíta len raz, pri jednom referenčnom napätí, a vydá prostú nulu alebo jednotku bez akejkoľvek informácie o spoľahlivosti. Dekódovacie algoritmy LDPC typu min-sum alebo sum-product s takýmito vstupmi síce fungujú, ale prichádzajú o svoju kľúčovú výhodu. Výsledok je potom približne porovnateľný s BCH kódom o rovnakej miere redundancie. Inými slovami, aj keby bola paritná kontrolná matica z radiča získaná úplne presne, LDPC dekodér by zlyhával na tých istých opotrebovaných stránkach, na ktorých zlyháva aj BCH.
Ako radič vôbec získava informáciu o spoľahlivosti jednotlivých bitov? Tak, že stránku číta opakovane a zakaždým trochu inak posunie referenčné napätie. Až z niekoľkých takýchto čítaní poskladá pre každý bit údaj o tom, aký istý si prečítaným výsledkom je. Posun napätia sa ale riadi pomocou príkazov, ktoré nie sú verejne popísané. Operačné kódy, adresy, významy jednotlivých hodnôt, to všetko si každý výrobca (Samsung, Kioxia, Micron, SK Hynix, YMTC) rieši po svojom, a veľmi často navyše mení medzi jednotlivými generáciami svojich pamätí.
Teoreticky teda nič nebráni tomu, aby chip-off čítačka mäkké čítanie zvládla. Niektoré novšie platformy vedia na flash pamäť posielať vlastné príkazy, samy o sebe sú však navrhnuté pre dávkové čítanie a pre interaktívny read-retry cyklus, ktorý mäkké čítanie vyžaduje, by najprv musel byť upravený aj ich firmvér. Hlavnou prekážkou však zostáva pracná analýza a dokumentácia protokolu pre každý jednotlivý typ die.
BCH je kód, ktorý sa dá popísať niekoľkými málo parametrami. Stačí Galoisovo teleso, primitívny polynóm a trojica (n, k, t), a o kóde je povedané všetko. Pri LDPC je situácia zásadne iná, pretože je definovaný celou svojou paritnou kontrolnou maticou H. A tá sa v moderných radičoch neukladá ako tabuľka, ktorá by sa dala z firmvéru vyčítať. Býva zadrôtovaná priamo v ECC engine, teda v tom kuse kremíka, ktorý parity počíta.
Aj keď sa nejaká tabuľková podoba v pamäti objaví, ide obvykle o tzv. kvázicyklickú (QC) maticu. To znamená, že H sa skladá z malých štvorcových submatíc s pravidelnou štruktúrou, ktorú možno uložiť len ako hodnotu posunu, prípadne doplnených o permutácie špecifické pre jednotlivé stránky alebo bloky a pre konkrétnu kombináciu daného radiča s danou NAND pamäťou. Reverzné inžinierstvo jednej takej kombinácie je teda práca, ktorej výsledok nemožno preniesť ani na ďalší radič, ani na inú pamäť.
Dátový tok získaný z flash pamäte nie je priamym vstupom pre ECC dekodér. Pred ním je spravidla potrebné eliminovať scrambling, teda operáciu XOR s pseudonáhodnou maskou, ktorou radič dáta transformuje ešte pred samotným zápisom a ktorej úlohou je rozložiť štatistické vlastnosti zapisovaných dát tak, aby sa v pamäti neopakovali rovnaké vzory.
Sama osebe táto úloha nie je principiálne ťažká, musí byť však vykonaná úplne presne. BCH je schopný drobné nepresnosti v predspracovaní absorbovať, pretože jeho pracovný bod leží výrazne pod kapacitou kanála. LDPC takú rezervu nemá a operuje blízko Shannonovej medze flash kanála. Odchýlka, ktorá by pri BCH zostala bez následku, pri LDPC vedie k zlyhaniu celého dekódovania.
Reverzná analýza BCH na úrovni rodiny radičov je prijateľne nákladnou úlohou. Kód je plne určený niekoľkými málo parametrami, ktoré možno z firmvéru získať prácou v ohraničenom rozsahu, a ich platnosť sa prenáša na všetky radiče tej istej rodiny. V prípade LDPC je situácia odlišná. Pre každý radič je nutné zvlášť získať paritnú kontrolnú maticu, popísať protokol mäkkého čítania a odladiť iteratívny dekodér, pričom výsledok týchto úkonov nie je prenosný medzi radičmi a s každou ďalšou generáciou sa celý postup opakuje. Zodpovedajúca investícia je tak rádovo vyššia než pri BCH, a to pre trh, na ktorom sú objemy jednotlivých modelov radičov obmedzené a ich životný cyklus krátky. Za týchto podmienok nie je prekvapivé, že integráciu LDPC dekódovania do praktického chip-off postupu doteraz nefinancoval žiadny komerčný výrobca nástrojov a že sa práca, ktorú treba opakovať pre každú novú generáciu radičov, nevypláca ani v podmienkach samostatného laboratória.
Ak je predmetom záchrany dát pamäť s dátami chránenými pomocou LDPC, od chip-off postupu sa v praxi upúšťa hneď v úvode. Práca pokračuje priamo cez pôvodný radič, obvykle pomocou systému PC-3000 od firmy ACE Lab. ECC engine v radiči v tomto zapojení plní svoju pôvodnú funkciu, teda vykonáva LDPC dekódovanie aj mäkké čítanie tak, ako boli navrhnuté, a laboratórium rieši až vyššie vrstvy, teda rekonštrukciu blokov a obnovu translátora. Všade tam, kde je v nasadení LDPC, je tak jediným prakticky použiteľným dekodérom sám radič.