Восстановление базовых требований:
- Достаточно сильная контрольная сумма для защиты от простых человеческих ошибок.
- "Ожидаемая" контрольная сумма отправляется с сервера -> клиент, что позволяет клиентской сторонепроверка.
- Контрольная сумма не должна раскрывать слишком много информации о SSN, чтобы минимизировать утечку конфиденциальной информации.
Я мог бы предложить использовать криптографическое значение (SHA-1 и т. д.), но не отправляет полное значение хеша клиенту.Например, отправьте только младшие 4 бита из 160-битного результата хеширования [1].Отправив 4 бита контрольной суммы, вы сможете обнаружить ошибку ввода данных 15/16 - это означает, что вы будете обнаруживать ошибки в 93% случаев.Обратная сторона, однако, заключается в том, что вы «просочились» достаточно информации, чтобы уменьшить их SSN до 1/16 пространства поиска.Вы сами решаете, стоит ли эта утечка удобства на стороне клиента.
Настраивая количество отправляемых битов "контрольной суммы", вы можете настраивать удобство для пользователя (то есть обнаружение ошибок) иутечка информации.
Наконец, учитывая ваши требования, я подозреваю, что этот компромисс между удобством и утечкой является неотъемлемой проблемой: конечно, вы могли бы использовать более сложный алгоритм крипто-вызова / ответа (как подсказывает Ник ODell).Однако для этого потребуется отдельный запрос туда-обратно - то, что, как вы сказали, вы пытались избежать в первую очередь.
[1] В хорошей крипто-хэш-функции все выходные цифры хорошо рандомизированы из-зак лавинному эффекту, поэтому конкретные цифры, которые вы выбираете, не имеют особого значения - все они фактически случайны.