<aside> STO 거래소는 유효성 인증/인가 및 자산 관련 데이터를 검증하는 백엔드 laravel과 체결, 호가, 지갑 연동 등의 기능을 하는 nodejs가 구축되어 있습니다.
거래소 상세 페이지에서 사용자 코인 혹은 마켓의 잔액 표시되는데요. 이 잔액은 체결 될 때마다 값이 실시간 변경되어야 하기 때문에 소켓 통신을 합니다. 소켓 통신을 하기 위해서 양방향으로 연결이 되어야 하는데 이때 사용자 인증이 필요합니다.
사용자 인증을 할 때 세션 쿠키 방식과 토큰 방식은 sanctum을 하나씩 살펴보도록 하겠습니다.
</aside>

주문 가능 수량이 매수를 할 때마다 페이지 변화 없이 감소되는 것을 확인할 수 있습니다.
브라우저 개발자 도구에 laravel_session 쿠키 값은 세션 정보를 암호화하여 base64로 인코딩한 값을 확인할 수 있습니다.

laravel_session 값을 초기 소켓 연결 때 전달하여 node 서버에서 인증을 받아야 합니다.
'cipher' => 'AES-256-CBC',
'key' => env('APP_KEY'),
'previous_keys' => [
...array_filter(
explode(',', env('APP_PREVIOUS_KEYS', ''))
),
],
laravel_session의 암호화 알고리즘은 laravel11 기준으로 /app/config/app.php에 aes-256-cbc가 디폴트 설정되어 있습니다. aes-256-cbc 알고리즘은 대칭키 암호화 알고리즘으로 암호화 복호화에 동일한 키를 사용하는 방식이므로 node 서버에 도 이 키를 가지고 복호화를 할 수 있습니다.
먼저 암호화할 평문을 128비트(16바이트)로 나눕니다.
["Hello, world! Thi", "s is a test messa", "ge..............."] 마지막 블록은 패딩(PKCS#5등 여러종류가 있습니다.)으로 채워집니다.

첫 블록은 이전 암호화된 값이 없기 때문에 IV(초기화 벡터)를 이용합니다. IV는 임의의 값이어야 하며 이 값과 첫 번째 블록을 XOR 연산 후 key를 사용하여 암호화를 진행합니다. 그리고 다시 이 값을 가지고 다음 블록과 XOR 연산을 진행하며 반복합니다. 한 블록은 16바이트이며 XOR을 하기 위한 초기화 벡터 값도 16바이트여야 합니다.