Выберите фиксированное рабочее пространство
Возьмите практическое рабочее пространство со страницы
загрузок или используйте
examples/refund-workspace в репозитории Lispex. Архив и каталог репозитория
имеют один фиксированный состав. Все ключи и создаваемые материалы держите вне
этого неизменяемого каталога.
В рабочем пространстве находятся два разных правила возврата.
| Контур | Исходник | Форма входа | Результат |
|---|---|---|---|
| Обмен решением | generated/exchange/refund-window.lspx | обычные записи JSON | allow или deny |
| Vouch | generated/vouch/refund-window-native.lspx.png | значения проверяемого входа | approve или deny |
Результат обмена не является свидетельством Vouch. Результат Vouch не является результатом обмена. Контуры используют один деловой пример, но не делят идентичность, квитанцию, политику или полномочия.
Проверьте рабочее пространство до начала работы
Перейдите в корень распакованного пространства или в каталог репозитория. Создайте отдельный рабочий корень под управлением вызывающей стороны и попросите Native проверить фиксированный состав.
mkdir -p ../refund-work
lispex workspace status --dir . --work-dir ../refund-workworkspace status проверяет точных участников пространства до отчёта о
рабочих слотах. Состояние present-unchecked означает только наличие. Оно не
означает проверку, доверие, свежесть или разрешение.
Выполните ограниченный обмен решением
Контур обмена применяет раздельные пределы подготовки и вычисления. Он пишет каталог решения из пяти участников и не сохраняет исходный текст правила.
mkdir -p ../refund-work/exchange
lispex rule run \
--source ./generated/exchange/refund-window.lspx \
--input ./generated/exchange/inputs/day-14-unopened.json \
--prepare-limits ./generated/exchange/prepare-limits.json \
--eval-limits ./generated/exchange/evaluation-limits.json \
--out ../refund-work/exchange/decision
lispex rule inspect --dir ../refund-work/exchange/decision
lispex rule verify --dir ../refund-work/exchange/decision
lispex rule replay --dir ../refund-work/exchange/decisionInspect и verify не выполняют правило. Replay создаёт один новый экземпляр
встроенного вычислителя и требует тот же результат. Переносимый результат
сохраняет значение vouch_eligible false.
Подготовьте локального издателя и независимого получателя
Создайте закрытый ключ в каталоге вызывающей стороны вне рабочего пространства и рабочего корня.
mkdir -p ../refund-issuer ../refund-recipient
lispex key generate --out-dir ../refund-issuer/key
lispex key inspect --public-key ../refund-issuer/key/public.spki.derДля упражнения на одной машине скопируйте только проверенный открытый SPKI в каталог получателя и снова проверьте скопированные байты.
cp ../refund-issuer/key/public.spki.der \
../refund-recipient/reviewed-issuer.spki.der
lispex key inspect \
--public-key ../refund-recipient/reviewed-issuer.spki.derНастоящим издателю и получателю нужен отдельно выбранный канал передачи и
проверки. Локальная копия помогает пройти пример, но не является процедурой
доверия. Не помещайте private.pkcs8.der в рабочее пространство, рабочий
корень, каталог получателя, систему контроля версий или bundle.
Получатель создаёт политику решения из четырёх независимо проверенных фактов. Ни один факт не берётся из bundle, который предстоит аутентифицировать.
lispex decision policy create \
--public-key ../refund-recipient/reviewed-issuer.spki.der \
--semantic-rule-sha256 14bb6f2e43cee011aedbeafc71d3716789bea8117e8331cd6a7feb1858d7418f \
--semantic-profile-id lispex/r7rs-rule-embedded-core/1 \
--engine-artifact-sha256 fa6e52559e1f5a43e50a3b7ac0cc5add6930cff0aed8aaff462cff4609362870 \
--portable-core-schema lispex.embed-receipt-core/v1 \
--consumer-label refund-recipient \
--out ../refund-recipient/decision-policy.json
lispex decision policy check \
--policy ../refund-recipient/decision-policy.jsonСоздание политики записывает конфигурацию. Оно не аутентифицирует организацию издателя и не даёт полномочий повторного использования или внешнего действия.
Выдайте и аутентифицируйте переносимое решение
Издатель подписывает уже проверенное переносимое ядро и пишет один
ограниченный файл .lpxdecision.
lispex decision issue \
--dir ../refund-work/exchange/decision \
--private-key ../refund-issuer/key/private.pkcs8.der \
--issuer-label refund-issuer \
--out ../refund-work/exchange/refund.lpxdecisionПолучатель использует свою политику и явно называет полученный bundle.
lispex decision inspect \
--bundle ../refund-work/exchange/refund.lpxdecision
lispex decision authenticate \
--bundle ../refund-work/exchange/refund.lpxdecision \
--policy ../refund-recipient/decision-policy.json
lispex decision replay \
--bundle ../refund-work/exchange/refund.lpxdecision \
--policy ../refund-recipient/decision-policy.jsonАутентификация подтверждает, что допущенный точный ключ подписал точный материал решения. Replay добавляет новое вычисление. Ни одна операция не даёт свежести, защиты от повторов, организационной идентичности или разрешения на внешнее действие.
Файлы в samples/recipient навсегда помечены
sample-do-not-trust. Они подходят только для тренировки команд и не могут
стать настоящей политикой получателя или корнем доверия.
Начните отдельный путь Vouch с изображением Lispex
Этот путь снова начинается с проверяемого входа и точного изображения Lispex.
Он не использует результат обмена, каталог решения, политику решения или
bundle .lpxdecision.
Сначала проверьте четыре входа идентичности Vouch.
mkdir -p ../refund-work/vouch
lispex vouch source-id \
--source-image ./generated/vouch/refund-window-native.lspx.png
lispex vouch input-id \
--input ./generated/vouch/inputs/day-14-unopened.checked.json
lispex vouch key-id \
--public-key ../refund-recipient/reviewed-issuer.spki.der
lispex vouch engine-id \
--executable /absolute/path/to/lispexПроверьте точный вывод движка, затем используйте полное напечатанное значение
как ENGINE_ID. Политика Vouch отделена от политики решения, даже если обе
ссылаются на один проверенный открытый ключ.
ENGINE_ID="sha256:<reviewed-native-engine-digest>"
lispex vouch policy create \
--public-key ../refund-recipient/reviewed-issuer.spki.der \
--engine-sha256 "$ENGINE_ID" \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--out ../refund-work/vouch/policy.json
lispex vouch policy check \
--trust-policy ../refund-work/vouch/policy.jsonВыдайте сохранённый учебный вход из точного изображения.
ISSUER_KEY_URI="pkcs8-file:///absolute/path/outside-workspace/refund-issuer/key/private.pkcs8.der"
lispex vouch issue \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--input ./generated/vouch/inputs/day-14-unopened.checked.json \
--profile csk.checked-profile/v1 \
--key-handle "$ISSUER_KEY_URI" \
--out-dir ../refund-work/vouch/issued \
--emit-bundleСохранённый проверяемый вход содержит только [14, false]. Выданный для него
bundle служит только пошаговому примеру. Его нельзя повторно использовать в
передаче приложению, потому что он не связывает ID запроса, исполнителя,
действие и срок.
Выдайте отдельный bundle для шести значений запроса
Создайте файл вызывающей стороны с этими точными каноническими байтами и одним конечным переводом строки.
{
"input": "csk.checked-input/v1",
"value": [
14,
false,
"request-123",
"operator-7",
"refund",
1785600000
]
}Сохраните его как ../refund-work/app/current-request.checked.json. Выдайте
новый bundle, который связывает все шесть значений.
mkdir -p ../refund-work/app
lispex vouch issue \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--input ../refund-work/app/current-request.checked.json \
--profile csk.checked-profile/v1 \
--key-handle "$ISSUER_KEY_URI" \
--out-dir ../refund-work/app/current-request-issued \
--emit-bundleПравило возврата читает первые два значения. Идентичность входа Vouch и подписанный контекст всё равно связывают все шесть точных значений. Дополнительная связь не доказывает аутентификацию исполнителя или уникальность запроса. Эти факты устанавливает окружающее приложение из собственного доверенного состояния.
Запустите новый gate для точного текущего запроса
Получатель независимо предоставляет отдельный bundle, свою политику, точное
изображение и тот же вход из шести значений. Gate создаёт новое локальное
наблюдение выполнения и требует approve.
lispex vouch gate \
--bundle ../refund-work/app/current-request-issued/vouch-input-bundle.json \
--trust-policy ../refund-work/vouch/policy.json \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--input ../refund-work/app/current-request.checked.json \
--profile csk.checked-profile/v1 \
--require-decision approve \
--report-out ../refund-work/app/current-request-gate.jsonСохранённый отчёт проверки или gate является диагностическим выводом. Он не заменяет новый gate для другого запроса и не может стать входным свидетельством следующего gate.
Остановитесь на границе полномочий
Gate с кодом выхода 0 устанавливает одно локальное совпадение между живым аутентифицированным текущим выполнением и требуемым решением. Он не аутентифицирует вызывающего пользователя приложения, не разрешает исполнителя или действие, не проверяет серверное время, не резервирует ID запроса, не выполняет возврат и не делает внешнюю транзакцию однократной.
Пример передачи приложению показывает, как окружающее приложение связывает
серверные факты и публикует одну информативную запись would_act без
перезаписи. Этот пример тоже не выполняет внешнее действие.
Передача приложению · Использование Lispex Vouch · Изображения Лиспекса