И сказала кроха. Что такое хорошо, и что такое плохо?
Если сложно чётко сформулировать словами такой алгоритм, то написать код для этого еще сложнее, так как код это просто метод представления этого алгоритма.
Получается.
Есть подпись 1 из 2.
1 ключ у программы
2 ключ у пользователя в открытом или шифрованном виде.
Ключ 2 может добавить транзакцию в блокчейн, которая отвергает первый ключ после этой транзакции. Хотя тут нужно специальная реализация, которая определяет который ключ главный. Иначе первый ключ, может сделать невалидным второй
Или подпись 2 из 3
1 ключ у программы
2 ключ у пользователя в открытом виде
3 ключ в доступе для программы и пользователя, но он зашифрован паролем пользователя
Программа самостоятельно не может воспользоваться зашифрованным ключем без пароля пользователя. Пользователь может воспользоваться своим ключем и расшифровать второй ключ для подписи
Нужно более детально:
есть три ключа ( программы, пользователя и форсмажёр) и существуют только три возможные типа счетов
1 из 3 любой ключ позволяет распорядиться средствами поступивими на такой счёт. Это управляемые программой счета.
2 из 3 счета для распоряжения программой средствами нужно подтверждение пользователя и наоборот.
Пример, счёт приёма платежей при поступлении на него автоматически переводит допустим пропорционально на счета 2 из 3 для дальнейшего использования.