量子コンピュータを学ぶ!!
量子コンピュータを学ぶ!!
量子コンピュータについて、少し学習したので投稿します。
※間違っていたり、良い参考文献知っていたら共有していただけると幸いです。
ブロックチェーンをいろいろ調べている中で、デジタル署名やハッシュ関数、楕円曲線暗号などの基本的な暗号技術がブロックチェーンの安全性を担保しているということがやっと分かってきた。
基本部分にあるのは、
片方からの計算は簡単でももう一方からの計算は難しい
ということ。
ハッシュ値から元の値を求めるのは、(ハッシュ関数が分からない限り)すごく大変だし、ビットコインアドレスから、公開鍵や秘密鍵を求めることは、大きな数の素因数分解が大変であるということから求めることは難しくなっている。
「現実的な時間内で解けない(計算できない)」という基に安全性が担保されているのである。
今はまだ素因数分解を効率良く解けるアルゴリズムが実用化されていないので問題ないのだが、そうも言っていられなくなるかもしれない。。。
ブロックチェーンだけでなく、デジタル署名技術やHTTPS通信など現代の主要な暗号方式の常識をひっくり返しそうなのが、ピーター・ショアの「ショアの(素因数分解)アルゴリズム」!!
量子コンピュータが汎用的になり完成した暁には、素因数分解が効率良く解けるようになると考えられており、もし本当だとすると現代の暗号技術は、ほぼ意味をなさなくなり、この情報社会が大混乱に陥るかも。。。
前置きは長くなったが、ブロックチェーンのセキュリティ部分にも十分関わってきそうな量子コンピュータについて学習して見て予想以上に面白かったため共有する。
用語や簡単なサンプルプログラムは、下記リポジトリに格納してあります!
(用語などについては、READMEに記載)
量子コンピュータに興味を持つきっかけになったショアのアルゴリズムのソースコードを読んでみたが、内容を完全に理解するためには、まだまだかかりそうなので引き続き勉強していきます!!
セキュリティの会社に勤めている身としてさらに気になったのが
「量子テレポーテーション」!!
物理的な媒体を介することなく、量子の状態(位相と確率(振幅の大きさ))を伝えるというもので、物理的にもセキュリティのレベルが上がる上に、盗聴されてもすぐに分かるというものです。すでに暗号鍵配送(QKD)にも応用されているということですが、自分の会社でもすぐに上司に相談して量子テレポーテーションを活用した新しいセキュリティビジネスを確立するプロジェクトを立ち上げたいと思いました!
(まだまだ若造なので、実績や知識を沢山身につけて、上司に頭を振らせられるようにしたいと思います。。)
それにしても、0と1の両方の状態を持ち合わせるというキュビットの考え方は面白い!
身近では見られない物理現象を利用しているので、これまでにできなかったことができるようになるかもしれないですね!!
2019年公開の「アベンジャーズ・エンドゲーム」でも量子の力を使って、アベンジャーズがサノスに逆襲するというものありましたがあんなことができるようになるかもしれないですね!
次のアントマンの映画も量子世界がキーになってくるとのことですので、量子コンピュータのことをさらに学習した上で映画館に行ってみたいと思います!
【参考になったもの】
↑有料の学習コンテンツですが、非常にわかりやすかったです。
↑量子コンピュータとは何か?従来のPCとは何が違うのか?という部分から説明してくれているので、入門に良いと感じました。
Swaggerを使ってAPI仕様書を書く!
Swaggerを使ってAPI仕様書を書く!
先日、Swaggerというフレームワークを利用して作成されたAPI仕様書を初めて見たが、使い方や見方がさっぱり分からなかったため、
備忘録の意味でも学習内容を記載いたします。
今回、サンプルや参考サイト等を見て記述したyamlファイルは下記リポジトリに存在します。
https://github.com/mashharuki/Swagger_Practic
Swaggerとは?
REST APIを定義するためのフレームワークのこと
(別の方は、ツールセットとも表現されていました。)
REST APIとは?
RESTの原則に則って構築されたWebシステムのHTTPでの呼び出しインターフェースのこと。
RESTとは?
REpresentational State Transferの略で、分散型システムにおける複数のソフトウェアを連携させるのに適した設計原則の集合、考え方のこと。
RESTの原則に従うことでURIに規律が生まれ、サービス開発者が楽になるなどのメリットが生まれる!
※他に色々ありそうですが、今日のところは割愛させていただきます。
Swaggerの記述に方法については、YAML形式とJSON形式の2通り存在する。
(今回は、YAML形式で作成)
get,post,put,deleteメソッドについてそれぞれ1種類ずつ作成して見た。
AWSのAPIGateWayとも組み合わせることができるらしく、AWS上で構築したアプリケーション機能について、定義内容と一緒にすぐにAPIが試せるドキュメントが生成できるのは素晴らしい!!
海外では、API使用書をSwaggerで書くことがデファクトスタンダートとなっているらしい。。(自社でも取り入れたい!)
中身の基本的な構造については、下記の通りREADME.mdに記載されているため、参照いただきたい。
システム開発でも労力がかかり馬鹿にできないのがドキュメント作成作業。。。。
もしAPIもせっせとwordやらパワポやらで作成するとなると大変な労力となる。。
Swaggerについては、まだまだ勉強が必要であるが、その素晴らしさを垣間見ることができた!
【参考サイト】
ブロックチェーンまとめ
ブロックチェーンまとめ
業務でブロックチェーンに携わるようになったため、昨年から色々と調べていたので、
自分なりにしらべてまとめた結果をslideshare(初投稿)してみました。
ブロックチェーンを取り巻く環境の変化は、凄まじく1年前と今とでもだいぶ状況が変わってきている。
(日本でも、民間と日銀がそれぞれ主導となってデジタル通貨の実証実験を始めたりするなど。。)
暗号資産についても、polkadotが上位に食い込んできたり、イーサリアムで大型アップデートが行われたりと
人間がコロナで縛られている間も技術はめざましく進化していることを実感しました。
まだ調べなきゃいけないことや勉強しなければならないことは山ほどあるが、まずは一旦アウトプットしてみようと
考えてスライドを投稿してみました。初投稿なので、見苦しいところもあるかと思いますが、よろしくお願いいたします。
※これからも勉強していくので、適宜更新・修正して行きたいと考えています。
https://speakerdeck.com/mashharuki/burotukutienmatome?slide=75
React.jsとNext.jsについて!
React.jsとNext.jsについて勉強しているので、その情報を共有するために投稿します。 solidityとスマートコントラクトを勉強していたが、React.jsと組み合わせてアプリケーションを作成している例をたくさん見かけたこともあり、 React.jsもこの際理解しようということにしました。 違いは下記の通り。
React.js: SPAを考えて作成されている。HTMLをJavaScriptの中に記述できるJSX機能が強力!
Next.js:React.jsに各種ライブラリを統合してパッケージ化したもの。React.jsを拡張させることができる!
ソースコードは、下記GitHubで公開中 react_app next_app どちらも npx コマンドを利用することで土台部分を自動的に作成してくれるため、すぐに開発に入ることができるという強みを持っている!
要素をコンポーネント化することで、複雑な画面でもプラモデルのパーツを組み立てる感覚で開発できるところが面白いし、扱いやすいと感じた。
エンタープライズ向けのWebページでもおそらく課題になるであろう画面レイアウトの統一とも相性がものすごく良いとも考えている。
ただ、従来のHTMLやJSPと比べてかなり書き方が変わるため、いきなり導入するということはハードルが高そうだが、柔軟に開発できるため導入するメリットの方が大きいのではないかと考えている。(特にNext.jsについては、HTMLファイルが無くなり、全てJavaScriptでの記述となるため従来のやり方に慣れている方からには、少なからず抵抗があるかもしれません。。。)
※現在、勉強中のため、適宜追記していきたいと考えています。
以下、書籍がとても参考になりましたので共有させていただきます。
実践スマートコントラクト開発 node.js超入門 React.js&Next.js超入門