cookiestoreの暗号化

# cookieの暗号化
>CookieStoreは、`セッションデータの保管場所を暗号化して安全にするためにencrypted cookie jarを利用`します。これにより、cookieベースのセッションの内容の`一貫性と機密性`を同時に保ちます。暗号化鍵は、signed cookieに用いられる検証鍵と同様に、`secret_key_base設定値から導出`されます。

https://railsguides.jp/security.html#:~:text=CookieStore%E3%81%AF%E3%80%81%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%BF%9D%E7%AE%A1%E5%A0%B4%E6%89%80%E3%82%92%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%97%E3%81%A6%E5%AE%89%E5%85%A8%E3%81%AB%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABencrypted%20cookie%20jar%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81cookie%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%86%85%E5%AE%B9%E3%81%AE%E4%B8%80%E8%B2%AB%E6%80%A7%E3%81%A8%E6%A9%9F%E5%AF%86%E6%80%A7%E3%82%92%E5%90%8C%E6%99%82%E3%81%AB%E4%BF%9D%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%E6%9A%97%E5%8F%B7%E5%8C%96%E9%8D%B5%E3%81%AF%E3%80%81signed%20cookie%E3%81%AB%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%82%8B%E6%A4%9C%E8%A8%BC%E9%8D%B5%E3%81%A8%E5%90%8C%E6%A7%98%E3%81%AB%E3%80%81secret_key_base%E8%A8%AD%E5%AE%9A%E5%80%A4%E3%81%8B%E3%82%89%E5%B0%8E%E5%87%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

暗号鍵とsigned cookieはsecret_key_baseをもとに出される
暗号化された保管場所とはどういうことか?
cookie jarとは何か？
secret_key_baseとは？


# secret_key_baseとは？
>`Your cookies will be encrypted using your application’s secret_key_base`. This goes a step further than signed cookies in that encrypted cookies cannot be altered or read by users. This is the default starting in Rails 4.
>
>Configure your session store in an initializer:
>
>```
>Rails.application.config.session_store :cookie_store, key:'_your_app_session'
>```
>In the development and test environments your application’s secret_key_base is generated by Rails and stored in a temporary file in `tmp/local_secret.txt`. In all other environments, it is stored encrypted in the `config/credentials.yml.enc` file.

https://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html#:~:text=Your%20cookies%20will,yml.enc%20file.

secret_key_baseを使ってcookieを暗号化しているらしい。
開発、テスト環境ではtmp/local_secret.txtに保管されて、その他の環境ではconfig/credentials.yml.encに暗号化されて保管されてるらしい。

# Session CookieStoreの設定方法
>Because CookieStore extends Rack::Session::Abstract::Persisted, `many of the options described there can be used to customize the session cookie that is generated`. For example:
>```
>Rails.application.config.session_store :cookie_store, expire_after: 14.days
>```
>would set the session cookie to expire automatically 14 days after creation. Other useful options include :key, :secure, :httponly, and :same_site.

https://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html#:~:text=Because%20CookieStore%20extends,%3Asame_site.

説明されたオプションの多くは生成されたセッションクッキーをカスタマイズするために使用する
ということはイニシャライザでcookieのカスタマイズができるのか

# sessionstoreの設定記述場所
>Configure your session store in an initializer:

https://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html#:~:text=Configure%20your%20session%20store%20in%20an%20initializer%3A

>1 初期化コードの置き場所
Railsには初期化コードの置き場所が4箇所あります。
>
> * config/application.rb
>* 環境ごとの設定ファイル
>* イニシャライザファイル
>* アフターイニシャライザファイル

https://railsguides.jp/configuring.html#rack-methodoverride:~:text=1%20%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E7%BD%AE%E3%81%8D%E5%A0%B4,%E3%82%A2%E3%83%95%E3%82%BF%E3%83%BC%E3%82%A4%E3%83%8B%E3%82%B7%E3%83%A3%E3%83%A9%E3%82%A4%E3%82%B6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB

>3.5.15 ActionDispatch::Session::CookieStore
セッションをcookieに保存する役割を担います。config.session_storeの値を変更すると別のミドルウェアを使えます。

https://railsguides.jp/configuring.html#rack-methodoverride:~:text=3.5.15%20ActionDispatch%3A%3ASession,%E4%BD%BF%E3%81%88%E3%81%BE%E3%81%99%E3%80%82

### イニシャライザとは
https://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html#:~:text=Configure%20your%20session%20store%20in%20an%20initializer%3A

# javascriptで解読できるらしい
>Note that changing your secret_key_base will invalidate all existing session. Additionally, `you should take care to make sure you are not relying on the ability to decode signed cookies generated by your app in external applications or JavaScript before changing it`.

https://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html#:~:text=Note%20that%20changing%20your%20secret_key_base%20will%20invalidate%20all%20existing%20session.%20Additionally%2C%20you%20should%20take%20care%20to%20make%20sure%20you%20are%20not%20relying%20on%20the%20ability%20to%20decode%20signed%20cookies%20generated%20by%20your%20app%20in%20external%20applications%20or%20JavaScript%20before%20changing%20it.

外部のアプリケーションやJavaScriptでデコードする機能に依存していないことと書いてあるからできるのか

# 感想
保管場所を暗号化、cookie jarについて理解することはできなかったがこれから理解できるだろう
またjavascriptについても今後勉強しなければなさそうだ。