Мережа сенсорів, покази якої неможливо перевірити
Про клас атаки, дорожчий за глушіння, і про те, як його закривають на рівні пристрою.
Постановка
Уздовж рубежу стоїть кілька сотень акустичних вузлів. Вони виявляють цілі, передають координати, картина зводиться в системі ситуаційної обізнаності. Оператор бачить обстановку, підрозділи працюють за нею.
Противник не глушить цю мережу й не намагається її зламати.
Він навчається підміняти покази. Не одного вузла — десятків. Формат повідомлення видобувається з трофейного пристрою, ключ доступу теж, і далі в систему йдуть свідчення, які виглядають нормально.
Штаб отримує картину, яка не є правдою. Виявити це нема чим: сенсор передає висновок, а не докази, з яких висновок можна відтворити.
Заглушений вузол мовчить, і це видно. Підмінений говорить, і йому вірять. Другий випадок дорожчий.
Проблема ширша за противника
Навіть цілком справний, не захоплений вузол може передати неправду.
Наведу власний випадок, зафіксований під час випробувань. Акустичний детектор упевнено тримав стабільний основний тон 84 Гц із гармоніками, кадр за кадром, і звітував про ціль. Ціллю це не було: це гул лінії електропередач за кількасот метрів. Три серії вимірів поспіль дали красиві таблиці, які описували заваду.
Детектор не був зламаний і не був поганим. Він працював рівно так, як написаний: шукав стабільний тон із гармонічною структурою й знаходив її. Просто ознака, за якою він судив, у цьому місці належала не цілі.
Жодне машинне рішення в бойовому контурі сьогодні не супроводжується доказом, з якого його можна відтворити. Ані виявлення сенсором, ані класифікація цілі, ані рішення автономного апарата про те, що вважати об’єктом атаки. Система каже «ціль», і в цьому доводиться вірити на слово — і противнику, і власній помилці.
Чому підпис цього не закриває
Перше, що спадає на думку — підписувати покази. Це роблять, і це правильно, але задачу не закриває.
Підпис доводить авторство, не істину. Пристрій, який підписав вигадане або помилкове число, дає бездоганний підпис під ним. Підпис відповідає на питання «хто це передав», а питання стоїть інше: «чи це правда і як це перевірити».
І другий бік: підписаний висновок перевірити неможливо. Якщо в повідомленні стоїть «ціль виявлена» з дійсним підписом, приймальна сторона може лише прийняти це або відкинути цілком. Розібратись, на підставі чого зроблено висновок, вона не може — цих даних їй не дали.
Рішення: підписувати ознаки, а вердикт перераховувати
Вузол не заявляє «ціль». Він передає підписані числа, з яких висновок обчислюється, і приймальна сторона обчислює його заново.
Канонічна форма свідчення з реального прогону — 97 байтів:
0101236c9ec37928f6000000006a8c1847000001a0333f2d0f000001a0333f7b2f 00095e7000001770004f000000430043004300002a30004d04070000ea600000fa 00000109a0000128e00001482000015f900001731800000000000000000000
Що в них лежить: ідентифікатор пристрою, номер сеансу, межі вікна спостереження, ядро основного тону та його розкид між кадрами, скільки кадрів було всього і скільки відкинуто через перевантаження, у скількох знайдено гармонічний ряд, скільки лягло в ядро, найдовша безперервна низка, рівень смуги над фоном, плоскість спектру, кількість гармонік, перелік сталих тонів цієї позиції, клімат.
Жодного поля, яке не входить у правило вердикту. Порядок фіксований, усі величини цілі, рухомої коми немає — інакше дві сторони отримають різні байти з тих самих даних, і підпис не зійдеться.
SHA-256 цієї форми підписується ключем у захищеному елементі, який не покидає кристал.
Приймальна сторона робить дві незалежні речі. Перевіряє підпис — це доводить, що числа не правлені. І перераховує вердикт із цих самих чисел тим самим правилом.
Реальний вивід перевірки:
елемент 01236c9ec37928f6ee відбиток збігається так (числа не правились після підпису) підпис дійсний так є в реєстрі так ключ той самий так несуперечливе так ВЕРДИКТ (перерахований тут): ЦІЛЬ · ядро 614 Гц, 67 кадрів у ядрі, 67 підряд, 10.8 дБ над фоном · тональний спектр (плоскість 0.077) вузол заявляв: ЦІЛЬ збігається — свідчення й висновок узгоджені до відома: ТАК
Що це дає на практиці
Вузол ловиться на хибному вердикті. Той самий фоновий тон, який детектор колись приймав за ціль, у підписаному вигляді виглядає так:
ВЕРДИКТ (перерахований тут): НЕМАЄ · смуга -3.2 дБ над фоном (треба 6) вузол заявляв: ЦІЛЬ РОЗБІЖНІСТЬ: вузол і перерахунок дійшли різного. до відома: НІ
Рівень нижче фону — тобто «ціль» була тихішою за тишу. Вузол цього не помітив; перерахунок помітив. Причому це виявляється не оператором на слух, а автоматично, з підписаних чисел.
Розбіжність між заявленим і перерахованим забороняє довіру. Дійсний підпис під хибним висновком гірший за підроблений запис: він означає, що справний на вигляд вузол видає неправду, і причина невідома — інша версія правил, пошкоджена прошивка, підміна логіки.
Внутрішньо неможливе не підписується взагалі. Якщо у свідченні кадрів у ядрі більше, ніж кадрів із гармонічним рядом, така пара чисел не могла існувати:
заблоковано ДО підпису: у ядрі більше кадрів, ніж із рядом
Перевірка блокує підпис, а не супроводжує його. Інакше запис отримав би бездоганний підпис і лишився безглуздим.
Реєстр пристроїв обов’язковий. Публічний ключ, доданий у сам запис, нічого не доводить: підробник підпише своїм і покладе поруч свій же. Ключ звіряється з реєстром, заповненим тоді, коли пристрій фізично в руках.
Акустика тут — полігон, не предмет
Тракт перевірявся на акустичному вузлі: роторне джерело зі стабільним основним тоном близько 610 Гц, вікно 20 секунд, 79 кадрів.
Але фізика на вході довільна. Канонізація, перевірка несуперечності, підпис і правило перерахунку від неї не залежать. Той самий тракт раніше працював на електричних вимірах — струм і напруга з підписом у кремнії, що доходив до перевірки в контракті.
Практичний висновок: шар довіри відокремлюється від сенсора. Він не залежить від того, що міряють, і додається до вже працюючої системи без переробки її вимірювальної частини. Змінюється те, що передається: замість висновку — ознаки, з яких висновок відтворюється.
Це стосується не лише сенсорів. Будь-яке машинне рішення в бойовому контурі — класифікація цілі, вибір об’єкта атаки автономним апаратом — має ту саму властивість: воно або супроводжується доказом, з якого його можна відтворити, або приймається на віру.
Необхідна умова: пристрій, який не працює в чужих руках
Свідчення, підписане ключем, який можна витягти з трофейного пристрою, не варте нічого. Тому шар довіри тримається на двох речах у самому елементі.
Ключ народжується в кремнії й не покидає кристал. Зони конфігурації й даних замикаються незворотно при провізіонуванні.
Робочі константи зашифровані ключем, якого не існує ніде. Він виводиться при кожному старті узгодженням між елементом пристрою та публічною половиною станції введення в експлуатацію. Приватного ключа станції на пристрої немає й не було. Немає перевірки, яку можна вирізати з прошивки — є обчислення, для якого бракує половини. Чужий елемент рахує інше число, константи лишаються шумом.
Плюс незворотний стан: монотонний лічильник у кремнії, який рухається тільки вгору й переживає зняття живлення. Він закриває окремий клас атаки — встановлення справжньої підписаної старої версії з відомою вразливістю — але це тема окремої розмови.
Межі, які варто називати самому
Правило вердикту мусить бути однакове з обох боків. Розбіжність версій правила виглядатиме як розбіжність між вузлом і перерахунком. Версія правила входить у запис.
Перерахунок не рятує від пристрою, який бреше узгоджено. Якщо скомпрометовано те, що подається на вимірювальний вхід, ознаки будуть несуперечливі й вердикт зійдеться. Це закривається не підписом, а другим каналом іншої фізичної природи — і це справді окрема задача.
Реєстр — церемонія, не автоматика. Його цінність у тому, що відповідальна людина підтвердила, який ключ якому пристрою належить. Автоматичне занесення знецінює всю конструкцію.
Прив’язка робить трофей непрацездатним, але не захищає образ прошивки від зчитування — читання йде повз захищений елемент. Закривається окремо, шифруванням флеші мікроконтролера.
Коротко
Підмінені покази дорожчі за заглушені: перші виявити нема чим.
Підпис доводить авторство, не істину. Підписаний висновок перевірити неможливо.
Вузол має передавати ознаки, а не вердикт. Вердикт перераховується незалежно, і розбіжність сама по собі є сигналом.
Шар довіри не залежить від фізики на вході й додається до працюючої системи без переробки її вимірювальної частини.
Петро Сідлярчук, ТОВ «ІнфраВерітас». Апаратний корінь довіри у вбудованих системах. Протоколи випробувань за реальним виводом і вихідні тексти: github.com/sidliarchukpetro
43 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментаріввперше читаю про модель захисту, до якохї сам дійшов кілько років тому. Використання звісно було іншим, промислові системи автоматизації. Читаючи про злами неможливо було не замислитись над задачею.
суцільний плюс.
а це можна писати на публіку?
дозволено керівництвом?
що саме, «синатура комунікаційного вердикта»? чи «монотоний гул в проводах»?
ти тут бачиш «іноваційну складову» чи «воєнну тайну Хлопчиша Кибальчиша» («вході г-но, на виході х-ня»)?
цікаво, а законтрити цю штуку шляхом дешевих доробок на самих літадлах можна? Якщо система натаскана на пошук монотонних послідовностей, то зробити так, щоб звук літадли вибивався із монотонності. Там хз — на роторах асиметричні кінці додати, якщо там ДВС — то щоб певні циліндри «троїли» рандомно, ну або тупо колонку повісити з реміксом дир-дирів?
Уточнення для тих, хто читатиме гілку: приватний ключ у слоті ATECC існує статично й не покидає кристал. Динамічне виведення ключа з ECDH — інший механізм, він описаний в іншій статті й вирішує іншу задачу.
Це наче відразу зрозуміло, що воно там повинно мати криптографічний підпис з урахуванням id, який отримує після заапрувленого біндінгу і з беком і отриманий приватний ключ має залишатися всередині залотченого кристалу.
То виходить такі сенсори передають просто рівень акустичного сигналу по спектру? Чи це чиста теорія? Я думав там тріангуляція та локальна нейронка на мопед, реактивний та електро, чи трансляція аудіопотоку на сервер з нейронкою, і там тоді відповідно оператор може прослухати запис сам.
Моє розуміння після зворотньої трансляції з допомогою ШІ агента браузера із інженерно-канцелярної на ремісничо-кодерську:
— «роль кібезпеки» цілої системи кладеться фейковими даними на лопатки одним мізинцем при качиній типізації вхідних даних (фуфловий вердикт на давачі — обфускація на виході),
— ключів статично нема в залоченому кристалі, там лише секретна формула для їх динамічного обчислення.
навіщо, якщо можна застосувати FFT і відсилати коефіцієнти?
FFT і коефіцієнти — саме це й передається. Ознаки в записі і є результатом спектрального розбору: ядро основного тону, розкид між кадрами, плоскість спектру, кількість гармонік, рівень над фоном. Питання не в тому, рахувати FFT чи ні, а в тому, що підписувати — його результат чи висновок із нього.
Не теорія. Тракт зшитий і працює: канонічна форма 97 байтів, підпис у кремнії, перерахунок на приймальному боці. Вивід у статті — з реальних прогонів, код у репозиторії.
Щодо ознак замість класифікації — це навмисно, і причина не в економії каналу. Класифікація, передана як висновок, неперевірювана: приймальна сторона може її прийняти або відкинути, але не встановити, на чому вона стоїть. Локальна нейромережа цього не змінює — вона робить висновок ще менш прозорим. Ознаки дають перерахунок: той самий вердикт обчислюється незалежно, і розбіжність між заявленим і перерахованим сама по собі є сигналом.Тріангуляція — окремий шар, і вона живе не в вузлі, а в агрегаторі: пеленг обчислюється з різниці часу приходу між рознесеними точками. Вузол не має даних для неї за визначенням.Трансляція аудіо на сервер — інша задача. Це працює, коли є канал і коли вузол не мусить мовчати. Закопаний автономний вузол на батареї не транслює потік: передача демаскує й з’їдає живлення. Плюс прослуховування оператором — це ручний контроль, який не масштабується на сотні точок.
FFT і коефіцієнти — саме це й передається. Ознаки в записі і є результатом спектрального розбору: ядро основного тону, розкид між кадрами, плоскість спектру, кількість гармонік, рівень над фоном. Питання не в тому, рахувати FFT чи ні, а в тому, що підписувати — його результат чи висновок із нього.
Мав на увазі що це ж не «бойовий проект», а просто одна з дослідних реалізацій? Бо в інтернетах ще давно бачив що там складні системи з масивом мікрофонів для тріангуляції джерела, а тут все максимально просто.
Думав там воно на електроопорах висить, чи десь на стовпі з маленькими сонячними панельками. Стрімити постійно і не обов’язково- достатньою спочатку детектувати звук, потім просипатися і робити FFT + таймаут, потім стрімити чи запускати нейронку щоб звузити спрацювання та пушити вердикт.
Слухати все йому і не потрібно, а тільки те що йому відфільтрувалося, підсвітилося і не є однозначним. Щось подібне як в США з мікрофонами для виявлення пострілів. Бо хоч там і нейронка, але до слуху людини поки не дотягує щоб судити про конкретне спрацювання.
Дослідна реалізація, так. Бойовим проєктом це стає після польових випробувань .
Сенсор тут навмисно простий: предмет не в ньому, а в тракті довіри, який від сенсора не залежить. Акустика — полігон, на якому його зручно ламати. Той самий тракт до цього працював на електричних вимірах: струм і напруга з підписом у кремнії, що доходив до перевірки в контракті.
Про каскад ви маєте рацію, так воно й рахувалось. Різниця з нейронкою не в тому, чи вона потрібна, а в тому, що йде в підпис: вердикт неперевірюваний, числа перераховуються. Нейронка може стояти поруч, це не суперечить.
Про вибіркове прослуховування згоден, поки точок десятки. На тисячах «неоднозначне» стає потоком, і оператор — вузьким місцем. У нас на цьому спіймався власний детектор: тримав стабільний тон і звітував про ціль, а це був гул лінії електропередач. На слух відрізнити важко, за числами — одразу.
Якщо вже розгорнута система куди технологічніша, то тоді не зрозуміло нащо робити нову, яка значно простіша? Судячи з давніх потужних сюжетів, там у них і нейронка є для класифікації. Хіба що ціна, бо усіяти буквально всю територію України умовною ESP32C3+SIM800L за 10$ може виявитися дешевшим, а може і більш дієвим варіантом, чим мати відносно малу кількість складних девайсів з мікрофонними масивами, але тільки на деяких локаціях.
Та і недавно бачив на гітхабі, що якийсь інженер, здається, з Марокко заопенсорсив «народний» радар з ФАР, що може помножити на нуль доцільність цієї акустики.
самий дешевий сенсор це смартфон з андроїдом, нічого не треба робити, вже все є на борту,30-40 баксів за одм
Це як в штучному екземплярі і для тесту на столі то може і так, але не коли треба працювати під дощем, і потенційно мінусові температури, коли літій «все», забезпечити зовнішній мікрофон, коли часто нема 3,5 джека, ну і коли треба живитися від акумулятора десь в полі, а то ще і його заряджати панельками. Як смартфон буде енергоефективно спати, поки тиша? Скільки це треба часу щоб зліпити з сміття 100к девайсів, щоб по одному на кожні 5 км² ? Простіше взяти нормальний масовий IP67 корпус РЕА та розвести плату за пару вечорів. Там вся ця шляпа б баксів10-15 коштувала, без акумулятора і панелі.
та-та. time to market vs давайте зробимо ідеально
будеш обходити їх сам регулярно чи наймеш кого на мінімалку?
а якщо щось не так, то всю партію відізвати (як Мерседес екологічні двигуни) або викинути, і знову хтось пройдеться і встановить нові в офлайні?
з іншого боку, якщо робити їх одноразовими (лайфтайм тиждень) за $10 за штуку, то облетів точки дронами, скинув нові девайси на ніобієвих магнітах до готової залізної платформи, то на якийсь час можна прискорити ТТМ Unix парадигмою «worse is better»
Спочатку поліграф, а потім розводити як експерти радять
поліграф дорогий, його «заслужити велика честь»
паяльник заміняє у польових умовах
який ще паяльник? обжимка (для особливо обдарованих пасатижі)
це ж скільки воно буже жерти потужності з АКБ в автономному режимі (ще й абонку плати згідно місячного календара)?
Йому ж жерти тільки при наявності звуку в десь 20мА + 100мА = 0,4вт, та і ті 100мА стосуються активної передачі, так що середнє менше для одиночних пакетів, як у автора. Без звуку там можна вважати 0 споживання, хіба що якісь heartbeat треба слати, щоб знати статус. Пара панелей ват по 30вт на схід-захід перекриє розряд.
100мA? наскільки пригадую для GSM модулів 2А має витримувати схема живлення без просадки, крім того регулярно іде «пінг» щоб базова станція знала де власне її абоненти, і чи не ліпше кого передати сусідній
а якщо хмарна погода кілька днів підряд? а листопад-грудень, коли взагалі майже без сонця, а падіння ємності АКБ в рази при пониженні темератури?
Нема часу сперечатися, відкривай kicad
скільки потрібно програмістів щоб замінити АКБ?
для них все як npm install battery працює
чому тоді у вакасніях пишуть «гет хандс дірті?»
То ж піковий імпульсний струм, він перекривається Low ESR електролітом, та і на середнє споживання мало впливає. Він прекрасно працював навіть з допотопним MC3463 з обмеженням по ~500мА.
того і сказав 2×30вт, а не 3вт. Скільки там годин на добу буде той звук детектуватись, щоб було споживання?3-4? Ну то це цілі 2 ват*г на добу треба. В похмуру погоду вони дають 5-10% від номінала. LTO до −30. Звичайний літій при мінусі заряджатися все одно не може без підігріву, а Ni-Cd дохленькі. Одна вживана банка і готово bpower.com.ua/...lithium-titanate-lto-12ah.
тоді двопроцесорна система, а це погіршує ТТМ
портативний акустичний девайс вийде з чемодан АС S-90
Наче там на собаку з GPS ніхто його і не збирався вішати. Акк 106×116×22 мм просто величезний, щоб висіти на стовпі чи дереві.
А другий процесор це хто? Програмувати то ви модемний модуль не будете. Як дуже хочеться, можете витерти прошивку з AT командами з модема, і написати свою- там навіть вхід з підсиленням під мікрофон є, але кому воно треба? MVP по хардвару це проект рівня дипломної роботи в універі, який там ТТМ і його погіршення 😁
«та тут 5 хвилин роботи студенту» ©(тм)
питань нема
А що в системі нема процедур виявлення зкомпроментованих вузлів та інших заходів встановлення достовірності даних?
Є, і вони потрібні. Питання в тому, на чому вони стоять.Поведінкові перевірки — розбіжність із сусідами, статистика, дивні мітки — працюють з готовими вердиктами. Вони відповідають на питання «чи поводиться вузол дивно», а не «чи випливало це рішення з того, що він насправді виміряв». Вузол, який бреше правдоподібно, такої перевірки не зачепить.Розбіжність між підписаними ознаками й перерахованим вердиктом обійти важче: числа мусять бути внутрішньо несуперечливі, узгоджені між собою й давати саме той висновок. Простір для брехні звужується з «будь-що правдоподібне» до «те, що витримує перерахунок».
І головне — це не заміна виявленню скомпрометованих вузлів, а те, на чому воно може стояти. Порівнювати вузли між собою можна тоді, коли є що порівнювати, крім вердиктів.
Межа, яка лишається: вузол, чий вимірювальний вхід скомпрометовано узгоджено, дасть несуперечливі ознаки й правильний перерахунок. Це закривається не підписом, а другим каналом іншої фізичної природи.
АІ?
P.S.
Як казав великий сучасний ІТ архітектор особистий друг Ілона: «роль кібербезпеки»
Інженер, який боїться інструменту( AI), — не інженер, а ремісник.
Щодо ролі кібербезпеки: в AQAP 2110 вона записана як вимога й поширюється вниз ланцюгом на субпідрядників. Скоро це буде роль у контракті, а не в жарті.
проблема не в тому що боїцця інженер чи не боїцця, він не робат з ШІ повернутими мізками і читати звик людьску мову у людозрозумілому стилі а не робописьмо хоча і кирилобуквами, тобто ото все воно хоча і чітатобібельне але не розумонепонятобільне (і не тому що многабукафніасіліл), навіть промт-переклад заходив ліпше
є ще подібний клас текстів судово-юридичного лінгвістичного напряму, але це в кого «папа юрист»
Згідно зі статтею на [DOU](dou.ua/forums/topic/61580), справжність переданих доказів (математичних ознак) і неможливість їх фальсифікації ворогом забезпечується комплексною системою перевірки в штабі, яка базується на кількох принципах:
* Математичний перерахунок у штабі: Сенсор більше не надсилає готовий вердикт (наприклад, текстове повідомлення «ціль виявлено»), під який ворог міг би згенерувати фейковий підпис на захопленому пристрої. Натомість пристрій передає первинні математичні числа й ознаки. У штабі алгоритм заново перераховує ці первинні дані за тими самими правилами. Якщо ворог спробує вигадати вердикт «зі стелі», математичний перерахунок у штабі просто не зійдеться з надісланими числами, і систему буде заблоковано. [1]
* Реєстр ключів пристроїв: У системі діє жорсткий реєстр публічних криптографічних ключів. Ключ вноситься туди людиною вручну лише тоді, коли пристрій фізично перебуває в руках відповідальних осіб. Якщо ворог підкине свій фейковий пристрій зі своїм ключем — система його відкине, бо цього ключа немає в реєстрі. [1]
* Виявлення аномалій (на прикладі звуку): Автор описує ситуацію на прикладі акустичних сенсорів. Якщо ворог спробує згенерувати фейкові математичні ознаки звуку, автоматичний перерахунок у штабі може виявити, що заявлена «ціль» за математичними параметрами була «тихішою за тишу». Будь-яка нестиковка між заявленим результатом і реальними математичними цифрами миттєво анулює довіру до повідомлення. [1]
## Межа ефективності цього рішення
Автор чесно зазначає: перерахунок у штабі захищає від цифрової підміни даних всередині пристрою, але не рятує, якщо ворог бреше узгоджено на фізичному рівні. Тобто, якщо ворог увімкне поруч із захопленим акустичним сенсором реальний динамік із записом звуку гелікоптера, математичні ознаки на вході будуть справжніми й несуперечливими, тому вердикт зійдеться. Захист від такої фізичної імітації — це вже окреме завдання, яке закривається використанням другого каналу зовсім іншої фізичної природи (наприклад, дублювання камерами чи радарами). [1]
[1] [dou.ua](dou.ua/forums/topic/61580)
share.google/aimode/yTcdyi918ZjDKJ1gw
Виклад точний, включно з межею. Додам одне: перерахунок не тільки блокує підроблений вердикт, а й ловить справний вузол, який помилився — у нас так виявилась ціль, що була гулом лінії електропередач. Тобто це працює і проти противника, і проти власної помилки.
Для виключення таких випадків я б додав в систему перевірки після виявлення, підтвердження і знищення (наприклад) цілі, через деякий час (скажемо — сутки). Коли в нас вже є реальне підтвердження і можна порахувати траєкторію цілі. Ми йдемо по цій траєкторії і вираховуємо джерела даних, які помилилися і не дали сигналу. А також, після виключення зі всього масиву реальних, підтверджених траєкторій дані які не підтвердилися. Ці дві множини — хибнопозитивні та хибнонегативні дані зберігаємо для всіх джерел (датчиків) і дивимось не статистику — якісь датчики будуть давати рівномірне розподілення помилок в часі (бо це реально випадкові події), а якісь явно виділятися — і тоді можна вже працювати з ними, розбираючись, в чому причина. Можна групувати за часом чи локацією. Можливо десь поруч працює газонокосарка по понеділках, наприклад.
flyman правий, це неможливо читати... Купа якихось зайвих зворотів, слів та абзаців.
Бракує лаконічності і розуміння яку проблему автор хоче вирішити чи спитати поради чи поділитись досвідом чи щось інше.
Якщо вже писати, то хоча б структуру задати, чи в кілька ітерацій рецензувати.
як варіант обфускації, щоб було менше від бдунів запитань на кшталт
dou.ua/...rums/topic/61580/#3114808
з іншого боку: «Якщо можеш не писати — не пиши» © (тм)
Я таке вже бачив. Людина вариться в темі роками, спілкується з такими ж людьми. Їй здається, що контекст всім зрозумілий, що у всіх ті ж базові знання, задачі і обмеження. Можна пропускати слова, речення і абзаци, і всім же має бути зрозуміло, правда? А не правда.