Думите предварително споделен ключ се срещат в документацията на IPsec, OpenVPN и WireGuard, но означават три различни обекта. Единият е тайна за удостоверяване, друг защитава контролен канал, а трети добавя материал към ръкостискане, което вече има идентичности. Ако ги смятате за взаимозаменяеми, получавате връзка, която се проваля на етап, който никой не е очаквал. Прочетете какво прави полето в този протокол, преди да копирате стойност в него.

Три протокола, три значения

Всеки протокол определя задачата на ключа в собствената си спецификация и тези задачи не се припокриват. Тайната за удостоверяване доказва, че две страни знаят една и съща стойност. Ключът на контролния канал защитава преговорите, които следват. Допълнението към ръкостискането променя графика на ключовете, без да променя кои са страните.

Никоя от тези роли не удостоверява човек, и точно това объркване коства най-много време. Предварително споделеният ключ се предоставя на устройства или шлюзове преди размяната, затова всеки притежател изглежда еднакъв за другата страна. Това свойство е предимство за връзка между два рутера и риск за услуга за отдалечен достъп с поименно известни служители. Дръжте данните за достъп и криптографската тайна в отделни колони на документа, който описва внедряването.

IPsec и OpenVPN използват думата по различен начин

IKEv2 може да удостовери отсрещната страна с предварително споделена тайна вместо със сертификати и стойността трябва да съвпада от двете страни. Тъй като една и съща тайна обикновено се настройва за група страни, всеки притежател може да се представи за останалите, а размяната не печели никаква пряка поверителност от ключове за идентичност, които никога не е имала.

Опциите tls-auth и tls-crypt на OpenVPN прикрепят статичен ключ към контролния канал, като добавят подпис HMAC или криптират самите преговори. Този ключ не е потребителска парола и не заменя клиентския сертификат. Различаването им е важно при подновяване, когато смяната на парола оставя ключа на контролния канал непокътнат.

PSK в WireGuard добавя, но не идентифицира

Страните в WireGuard вече имат публични и частни ключове Curve25519 и ръкостискането удостоверява тези идентичности. Незадължителен предварително споделен ключ се смесва във верижния ключ и добавя симетричен материал върху размяната на публични ключове.

Сам по себе си той не дава идентичност нито потребителски акаунт, затова операторът не може да различи двама притежатели по техния PSK. Двете страни трябва да носят една и съща стойност, иначе ръкостискането се проваля без полезно съобщение за грешка. Затова ротацията трябва да се планира за двете страни наведнъж, а не като редакция на един файл.

Проверете разпространението, ротацията и премахването

Разпространението е слабото място на всеки проект, който използва една тайна на много места. Стойност, поставена в чат прозорец, запазена в хранилище или използвана повторно между среди, натрупва копия, които никой не може да изброи, и всяко копие тихо разширява обхвата на щетите.

Текстът в Base64 не е криптиране. Тайна, съхранена до публичен сертификат в същата директория, все още е тайна в открит вид.

openssl rand -base64 32
sudo wg show wg0 preshared-keys
sudo grep -R -n 'psk' /etc/ipsec.d/ 2>/dev/null

Ротирайте по график и след всяко съмнение за изтичане, като обновявате всяка предвидена страна, преди да оттеглите старата стойност. След това тествайте връзката от двата края, защото несъответстващ ключ се проваля при ръкостискането и изглежда точно като проблем с защитна стена.

Запишете коя тайна защитава кой етап, за да не се бърка нулиране на парола с подновяване на криптографски ключ. Този един ред спестява час всеки път, когато някой одитира внедряването.

Подобни статии