Всё, что не важно для бизнес-логики, должно быть вне domain-слоя.
Разве бизнесу важно, как будет выстроен хеш пароля? (Несомненно, зависит от бизнеса, но в 90% случаев нет).
Спросите об этом доменного эксперта или хотя бы менеджера.
Они могут даже не знать, что такое "хеш" в принципе.
А интерфейс лежит в домене, потому что нужно как-то соединить это "неважно" с "нужно".
Даже если бы была только одна реализация, ее в примере вынесли все равно.
Можно ли положить в домене? Вы строите систему. Хотите, положите в доменный слой, хотите, вынесите в микросервис. Хотите, пишите на PHP, или на Go или на C++.
Как решите Вы, так и делайте.
Правильнее абстрагировать домен от всего лишнего. Всего, что не касается предметной области. Но вот только иногда (почти всегда) этого не удается сделать адекватно и следующий джун обязательно сделает что-то не так.
Плюс к тому же, абстракциями можно задушиться, что потом не разберешься, что использовать.
Есть моменты, которые будут меняться вне зависимости от вашей предметной области:
обновления пакетов, уязвимости в безопасности при использовании чего-либо, новые быстрые реализации каких-либо модулей. В этом случае ваш бизнес-слой не должен быть подвержен изменениям. Но он четко должен знать, если вызовет реализацию этого интерфейса, то получит результат. Лишь это вы и должны гарантировать на бизнес слое.