Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ChaChaPoly and You, CryptoKit Explained

monolithic-adam
September 10, 2022

ChaChaPoly and You, CryptoKit Explained

トークタイトル
ChaChaPoly and You, CryptoKit Explained
トーク概要
「え、CryptoKitを使いたいけど、いつ、何を使うべきかわからない。。。」の方はもう心配いらない。このトークで一緒にCryptoKitの謎を解きましょう!

ユーザーのデータを暗号化しないといけない開発案件が出てきて「CryptoKitを使うチャンス!」を思って調べてきました。それでみんなにそのKnowledgeを共有したいと思っています!みんなCryptoKitマスターになりましょう!

monolithic-adam

September 10, 2022
Tweet

More Decks by monolithic-adam

Other Decks in Programming

Transcript

  1. ChaChaPoly and
    You, CryptoKit
    Explained
    Adam Henry / @monolithic-adam
    2022/09/10 iOSDC Japan 2022

    View full-size slide

  2. Adam Henry
    Twitter: @monolithic_adam
    GitHub: monolithic-adam
    ヘイ株式会社
    STORES レジ iOSアプリエンジニア

    View full-size slide

  3. https://tech.hey.jp/entry/2022/08/31/110114

    View full-size slide

  4. 1. CryptoKitって何?
    2. CryptoKitでできること
    3. 実装方法

    View full-size slide

  5. Part 1: CryptoKitって何?

    View full-size slide

  6. ● It refers to secure information and communication techniques derived from
    mathematical concepts and algorithms, to transform messages in ways that
    are hard to decipher.
    ● “世界一危ないコード”
    Cryptography

    View full-size slide

  7. ● CryptoKitは簡単に安全な暗号化オペレーションを行えるSwift
    Framework.
    ● WWDC 2019で発表された
    (https://developer.apple.com/wwdc19/709)
    ● 高級なSwiftインターフェース
    CryptoKit

    View full-size slide

  8. Part 2: CryptoKitで何を
    できる

    View full-size slide

  9. Hash Functions

    View full-size slide

  10. Hash Functions
    ● 一方向 - 実質的に元に戻せない
    ● 決定論的 - 同じメッセージは常に同じハッシュ値になる
    ことを意味します
    ● 一意 - 同じハッシュ値を持つ 2 つの異なるメッセージを
    見つけることは事実上不可能であることを意味します

    View full-size slide

  11. Hash Functionの使い方
    ● Digital Signature
    ● Message Authentication
    ● Password Verification
    ● など

    View full-size slide

  12. password1234567
    プレーンテキスト

    View full-size slide

  13. password1234567
    プレーンテキスト

    View full-size slide

  14. 139102cfdc7c93594
    6f551fd18f430f12fe
    1ce33bd605cb1885f
    27ebd7c5bb9b
    ハッシュドテキスト

    View full-size slide

  15. 簡単なコードExample

    View full-size slide

  16. Symmetric Key Cryptography

    View full-size slide

  17. Symmetric Key
    ● 同じキーで暗号化と復号化する
    ● デメリットはそのキーを共有しないと復号化できない

    View full-size slide

  18. 2 Cipher Types
    ● AES-GCM
    ● ChaChaPoly (モバイル端末だとおすすめ)

    View full-size slide

  19. AES-GCM (Advanced Encryption Standard - Galois
    Counter Mode)
    https://en.wikipedia.org/wiki/Advanced_Encryption_Sta
    ndard
    https://en.wikipedia.org/wiki/Galois/Counter_Mode

    View full-size slide

  20. ChaCha20Poly1305 is an authenticated encryption
    scheme that combines ChaChaTLS and Poly1305.
    https://www.cryptopp.com/wiki/ChaCha20Poly1305

    View full-size slide

  21. Public Key Cryptography

    View full-size slide

  22. Public Key
    ● 二つの紐づいているキー(publicとprivate)
    ● 誰でもpublic keyで暗号化できるけどprivate keyだけが
    復号化できる
    ● Digital Signatureに向いている(みんなよくSSHで
    Githubに通信していると思うのでこういうユースケースは
    知っている!!!)

    View full-size slide

  23. Insecure Module

    View full-size slide

  24. Part 3: 実装方法

    View full-size slide

  25. ChaChaPoly
    ● 今年の発表のInspirationはChaChaPolyを利用したの
    で紹介したいと思います!

    View full-size slide

  26. 最初はSymmetricKeyを生成する

    View full-size slide

  27. キーチェーンに保存しておく

    View full-size slide

  28. 1. 暗号化する時一回文字列をデータに変換して
    2. ChaChaPolyを利用してkey使って箱を封印する
    3. 暗号化されたデータを返す

    View full-size slide

  29. 封印でこれ思い出す、すみませんCryptoKit関係なかったw

    View full-size slide

  30. ChaChaPoly.SealedBoxって何?
    This object includes the combined property, which in turn
    contains three properties:
    ● nonce: it is an arbitrary number used in data encryption.
    ● ciphertext: are the encrypted data, with the same size as
    the input data.
    ● tag: it is an authentication label and prevents data from
    being altered without us noticing.

    View full-size slide

  31. 1. 複号化する時にデータを利用してもう一回封印されてい
    る箱をinitして
    2. Keyを利用して箱を開けて
    3. データを文字列に戻す

    View full-size slide

  32. 感想
    ● CryptoKitだと昔のストレス・専門家知識がなくても使えるCryptographyはとても
    いい
    ● AppleのC言語のCryptographyライブラリーより踏み間違えにくい状態になって
    いる
    ● みんなはこのトークでちょっとでもCryptoKitの興味を持っていたら登壇してよかっ

    View full-size slide

  33. ありがとうございます!

    View full-size slide