Обфускатор строк

Скрывайте API-ключи, токены, адреса эл. почты и номера счетов перед вставкой в тикеты или чаты. Выберите, сколько символов останется видимыми, символ маски и нужно ли скрывать реальную длину.

Покажите форму секрета, не раскрывая сам секрет. Вставьте токен, ключ, адрес эл. почты или номер счёта и выберите, какая часть начала и конца останется видимой. Всё, что между ними, заменяется символом маски, поэтому коллега сможет подтвердить, о каких учётных данных идёт речь, ни разу их не увидев.

Маскировка — это не шифрование. Если секрет уже был раскрыт, замените его, а не маскируйте.

Маскировка — инструмент для обмена информацией, а не средство защиты

Что на самом деле защищает маскировка

Скрытие середины учётных данных хорошо решает одну узкую задачу: оно позволяет говорить о секрете, не передавая его. Тикеты поддержки, отчёты об ошибках, скриншоты и переписки в чатах постоянно раскрывают учётные данные — обычно потому, что кому-то нужно было подтвердить, какой ключ используется, а не каков этот ключ. Запись sk_live_51H8...FgH полностью отвечает на первый вопрос и совсем не отвечает на второй.

В этом и состоит вся её ценность, и стоит точно обозначить границы. Маскировка — это односторонее преобразование с потерями, применяемое для общения между людьми. Это не шифрование, потому что здесь нет ключа и нет предусмотренного пути обратно. Это не хеширование, потому что оно не рассчитано на сопротивление чему-либо. Это ближе к тому, как в чеке печатают последние четыре цифры карты: достаточно, чтобы опознать, недостаточно, чтобы воспользоваться.

Сколько символов раскрывать

Каждый видимый символ — это символ, который злоумышленнику не нужно угадывать, поэтому префикс и суффикс должны быть настолько короткими, насколько позволяет задача опознания. Четыре символа с каждой стороны — разумное значение по умолчанию для длинных случайных токенов, именно столько показывают панели большинства сервисов. Для коротких значений оставляйте меньше: раскрыв четыре символа восьмисимвольного PIN-кода, вы почти ничего не скрываете.

Структурированные значения требуют дополнительного внимания, потому что видимая часть может быть информативнее, чем кажется. Многие API-ключи содержат осмысленный префикс, и различие между sk_live_ и sk_test_ — как раз то, что обычно нужно сохранить. С адресами эл. почты ловушка обратная: сохранить домен обычно нормально, но локальная часть вместе с небольшим доменом может указать на конкретного человека, и тогда замаскированная строка снова становится персональными данными.

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

Утечка длины и фиксированная ширина

Маска, сохраняющая длину, сохраняет информацию. Число звёздочек сообщает читателю, насколько длинный секрет, что сужает область перебора и может прямо указать на тип учётных данных, поскольку многие форматы ключей имеют фиксированную длину. Для пароля, в частности, публикация длины — существенная уступка.

Параметр фиксированной ширины заменяет всю середину постоянным количеством символов маски независимо от реальной длины, поэтому все замаскированные значения выглядят одинаково по размеру. Используйте его всякий раз, когда результат увидит кто-то за пределами вашей команды. Оставляйте вариант с сохранением длины по умолчанию, когда вы отлаживаете что-то вместе с коллегами и сама длина является диагностическим признаком — например, если вы подозреваете обрезанную переменную окружения.

И наконец, относитесь к этому как к шагу форматирования, а не как к реагированию на инцидент. Если действующий секрет уже попал в тикет, журнал или репозиторий, маскировка копии ничего не меняет в исходной утечке. Сначала замените учётные данные, а затем маскируйте всё, что вставляете далее.

Примечание об открытом исходном коде: реализовано на чистом JavaScript без сторонних библиотек.

FAQ

Можно ли восстановить замаскированный текст?
Нет. Замаскированные символы отбрасываются, а не кодируются, поэтому декодировать нечего. Остаются только те символы, которые вы решили оставить видимыми.
Сколько символов стоит оставлять видимыми?
Как можно меньше, но чтобы значение всё ещё можно было опознать. Четыре с каждой стороны подходят для длинных случайных токенов; для коротких значений вроде PIN-кода раскрывайте меньше или совсем ничего.
Что делает фиксированная ширина?
Она заменяет середину постоянным количеством символов маски, поэтому результат никогда не раскрывает реальную длину. Используйте её для всего, что передаётся за пределы вашей команды.
Отправляется ли мой ввод на сервер?
Нет. Маскировка выполняется полностью в вашем браузере на JavaScript, именно поэтому здесь безопасно вставлять действующие учётные данные.
Можно ли замаскировать адрес эл. почты, оставив его узнаваемым?
Да, оставьте последние символы, чтобы сохранился домен. Но будьте осторожны: короткая локальная часть вместе с небольшим доменом всё ещё может указать на конкретного человека.
Ключ утёк. Достаточно ли маскировки?
Нет. Маскировка влияет только на копию, которой вы собираетесь поделиться. Сначала замените раскрытые учётные данные, а затем используйте маскировку в дальнейших сообщениях.