2019の9日目の記事となります。iOS13で紹介されているCryptoKitに関して調査しましたので、実際の使い所とコードとそのテストを見ながら共有したいと思います。CryptoKitは調べてもまだ日本語ではほとんど記事になっておらず、試しにどんなものか見てみました。Appleの公式ライブラリです。関する操作を安全に、効率的に行うことができます。iOS13以上対応アプリに備えて知っておいても良いですね。できること概要にも書いたようにCryptoKitでできることは多岐に渡り、以下のことが実現できます。ハッシュ値に変換することができます。sha1やmd5などインセキュアなハッシュ値も生成が可能です。対象鍵をChaCha20-Poly1305方式やAES-GCM方式でを使用し、暗号化と復号を行うことができます。楕円曲線を使用し、デジタル署名を行い、また、検証をすることができます。作り、それを使用することで、データの暗号化、復号をすことができます。CryptoKit以前のsha256ハッシュ値生成sha256でハッシュ値生成してほしいというニーズは結構あり、アプリのユーザが持つデータのユニーク性を担保するためにアプリ内で生成、保存したsha256文字列をサーバに送ることなどがありました。Objective-CObjective-Cでsha256を実現するためには、よくC言語のライブラリのCommonCryptoを使用していました。Swiftまた、同ライブラリはSwiftでもインポートすることで使用でき、以下の通りです。ccHashedString)CryptoSwiftゆめみ内で私が関わった案件でも使用されていた、ライブラリで、現行一番使われていると思います。以前は上で書いたような方法でsha256などのハッシュ値を使用していましたが、CryptoKitを使用すると以下のようになります。簡単なテストコードも付けました。hashの値を文字列化する際にdescriptionを使用することも可能ですが、Appleはdescriptionのプロパティを変更する可能性があるとのこと(Dataのdescriptionの挙動が変わったこともありました)で、値のチェックにはdescriptionを使用せずにmapを使用しています。}}テストコード:プロトコルのデフォルト実装として用意しておくと、テストも楽で良いですね。sha256やmd5の値などはPHPなどで予め作成してその値をハードコードして確認をしました。256bits形式で作成することができますが、SharedSecretから作成することが多いようです。対象鍵方式では、共通の鍵を使用することで、暗号化、復号が可能になります。Signature)デジタル署名では、メッセージの送り主が秘密鍵で署名した内容の検証が可能です。signedSignature))}CryptoKitを使ったKey-Agreement-ProtocolCryptoKitを調査するまでは、Key-Agreement-Protocolのことは知らなかったのですが、互いの秘密鍵と公開鍵から共通鍵を作成するという方法で、現在はあまり良いアイデアは思い浮かばないですが、引き出しとして知ることができて良かったです。extensionでどう書くかとか、テストを書きやすいようにしようとか、考えながら書くことができました。ChaCha20-Poly1305やCurve25519、Key-Agreement-Protocolなど知らなかった方式を学ぶこともでき良かったです。整理したら、Githubにあげて、リンクを貼っておきます。実際に動くテストコードがあると、使い方やテストの書きやすいコードとかがわかりやすくなるかな、と思っています。CryptoKitを調べた内容は以上になります。この内容は一度、もっと荒削りに調べた際に、社内のLTで話させていただいています。ゆめみでは、iOSのみならず勉強会が盛んで、互いに勉強する環境を作成しようとしていっています。ゆめみでは、一緒に働ける仲間を絶賛募集中です。今回の記事を作成するにあたり、参考となったサイトは以下のとおりです。Ohno@ganchiku夫。