RSAモジュールで公開鍵と秘密鍵
ActivityPubでPOSTするには電子署名が必要。
でも、こいつが簡単じゃない…それどころか、めっちゃわけわかめ。
今回のゴールは以下の3点。
秘密鍵公開鍵の生成
秘密鍵を使って対象文字列の署名、サインの生成
公開鍵を使ってサインの検証
その1)
秘密鍵と公開鍵の生成はopensslコマンドを使うのが手っ取り早い。
秘密鍵の生成
openssl genrsa -out private.key 2048
2048はbit長というか、言ってみれば強度という理解で大丈夫そう。2048ぐらいで生成するのが良いらしい。
できる秘密鍵は
-----BEGIN RSA PRIVATE KEY-----XXXXXXX----END RSA PRIVATE KEY-----
改行されて?整形されてるんだけど、このまま使うっぽい。
公開鍵の生成
openssl rsa -in private.key -pubout -out public.key
最初に作った秘密鍵を使って公開鍵を作る。
できる公開鍵は
-----BEGIN PUBLIC KEY-----XXXXXXX-----END PUBLIC KEY-----
改行されて?整形されてるっぽいんだけど、このまま使うっぽい。
とはいえ、jsonは改行不可なので、jsonに入れる場合は、改行を削除して一行にしたものを使う、のかな。
[07/26 12:05:16]追記。
改行は「\n」(バックスラッシュとn)に変換する…
その2)
秘密鍵ができたので、perlのCrypt::OpenSSL::RSAモジュールを使って署名。
lolipopにはないけど、ローカルにはcpanでインストールしたので使える。
Fediverse入門―非中央集権型SNSサーバを作ろう!(2)
ここに掲載されているsign.plをありがたくそのまま使わせていただくことした。
秘密鍵を使ってインスタンス生成。
my $key = Crypt::OpenSSL::RSA->new_private_key($pk);
↑$pkという秘密鍵の文字列を渡して作る。
インスタンス生成ってなんのこっちゃ?だけど、呪文の始まり、ことでOK。
さらに、sha256でハッシュ化しますよ、という呪文を追加。
$key->use_sha256_hash();
ここまでやったら、秘密鍵を使った署名ができる。
my $s = $key->sign(INPUT);
signという、そのままのモジュールにINPUT、署名対象の文字列を渡せばRSA署名の出来上がりとなる。
署名対象の文字列とは。
ここでは、HTTPSヘッダのSignatureに使うことを想定して
date:[半角空白]日付文字列
digest:[半角空白]sha-256=本文のハッシュ文字列
みたいなものを「改行」で繋いだもの。
その3)
で、このサインが本当に合ってるのか署名の検証をする。
検証に必要なのは「公開鍵」「サイン」「署名対象文字列」
今度は公開鍵を使ってインスタンスを生成する。
my $rsa = Crypt::OpenSSL::RSA->new_public_key($pubk);
↑$pubkという公開鍵文字列の文字列を渡してやる。
秘密鍵を使った署名と同じ呪文を公開鍵で作ったインタンスに対しても追加。
$rsa->use_sha256_hash();
ここまでやったら検証ができる
$rsa->verify(TARGET, SIGN)
対象文字列と署名が合っていたら1が返ってくる。
この対象に対してこのサインがされてますよ、の証明になる、という理解で大丈夫かな。
サインはおそらくほとんどの場合、base64でハッシュ化する・されているので、
MIME::Base64 モジュールを使って
encode_base64 decode_base64
が必要になってくる、はず。
lolipopだとRSAが使えない、perlのCrypt::OpenSSL::RSAモジュールが入っていないので、あまり頑張りどころでもないよな、と思いつつ、うまくいかないのはなんか、好かん。
そして、意図通りに署名できたので、肝心要一丁目一番地のActivityPubでFollow、AcceptへのPOSTをしてみたんだけど、401で弾かれる。なんでや。
最初のactor.jsonを作った時に、公開鍵はとりあえず、空でもテキトーな文字でもいいというので、ほんとテキトーな文字を入れたのが失敗だったかなあ。
今回作った公開鍵に入れ換えたけど、最初のデタラメ公開鍵が伝播して使われてるという可能性もあったりして。
[08/18 12:30:06]追記
単なるPEMのコピペミスが原因。
サインする、検証するやりかたは上記エントリ通りで間違いなかった。
ActivityPubにおそるおそる話しかけてみた
↑署名対象文字列、HTTPSignatureヘッダでも悶絶吐血の記録
全然関係ないけど、AIにサイバーパンクな最後の晩餐を描いてもらったら、矮人の宴という半村良的な絵面が出てきたぞ
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
kindle販売実績これまでのあらすじ
常にこれから始めるひとがいて、いつも繰り返される話題のひとつ。
「ところで、売れるの?」
というやつ。
電子書籍を始めよういうひとたちと話す機会があるので、自分の整理のためにもメモ。
(ウチは2012年10月からkindleで販売を始めていて3年弱ぐらいになる)
ウヒョー売れてるぜ!…てなことはない。
でもありがたいことに1本も売れない月はなくて、毎月売上はある。どこで見つけてくれるのか管理画面で経路までわからないけど、AmazonのアフィリエイトやWEBサービスはインターネット上を広くあまねく覆っているのでタイトルの露出は見込める。販売力は強力強欲強烈で信用できる。
本数ベースだとこんな感じ
(KOLLというのはレンタル/標準というのが有料販売)
無料キャンペーンが60%ほどを占める(※今は無料キャンペーンをやっていない)
無料キャンペーンは、kindleでの販売を始めた最初の頃3タイトルでやったものと、猫写真集(無料キャンペーンの本数のほとんどは猫写真集)
無料で出せばそれなりにダウンロードされるのは確か。
ただ、先日の小説同人誌のひとたちとの電子書籍雑談会でも話題のひとつなったように、有料のものを無料にするのは変だし無料なら無料配布のものを出す、のがスッキリしていてわかりやすい(有料だったものを無料で配るのは有料で買ってくれたひとに失礼です、というお話も)
ちなみに、無料キャンペーンをやればその後そのタイトルは売れるという話も見るけど、ウチの場合無料キャンペーンと有料販売の有意な関連は見られない。
タイトル別(金額ベース)はこんな感じ
今のところは猫写真集が67%ほど占める。Amazonの月替わり公式キャンペーンに取り上げられたのが大きい。
ただ、それだけではなくて、平常時も猫写真集は確実に売れている。仕事で関わっている版元も同じくというか文芸は難しく実用書や啓発本の方が出るという話を聞く。
これは書籍のランキングなどでもやっぱり同じで、
https://www.tohan.jp/cat2/year/2013_1/ (トーハン)
https://www.nippan.co.jp/ranking/annual/ (日販)
トーハン、日販のベストセラーを眺めても小説文芸系は村上春樹など一部。
狙ってジャンルを選べばベストセラーランキングに出ることも可能だと思う。個人出版の電子書籍だからとか版元商業誌だからとか、関係ないところだろう。
作るためのネタ、小ネタは持ってるけど、売るためのネタは持ってなくて申し訳なく思います。はい。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
進歩もなく
日本語は素直に幅がきたら、幅に合わせて折り返すというのに、英語は我関せず。わがままなことに幅に合わせようとしない。ニッポンジンとガイジンの図、だ。なんじゃこいつ、とむかついたので
join("<wbr>", str_split($alpha,1))
を仕込む。独自拡張で非標準タグだけど、IEとFireFoxさえ対応してればこのさいOKだ。ちっ。
こうやって雑記をリニューアルしてみて、そんなに重くないんでちょっと感心。レスポンスのために今までちまちまデータを小分けにして、とかやってたのが馬鹿らしい。たかが3Mちょっとのテキストデータ、丸ごと全部読み込んでもたいしたことじゃない。過去約10年で3Mちょっと、今後10年やっても合わせて6Mほど。いや10年続くかどうかはともかく。データベースも使わず、Jcode以外はperl5.8標準のモジュールしか使ってないチョー簡単な設計。できることは、こうやって文字を入力する、たまに画像をアップロードする、だけ。歳くって頭のほうがあやしくなっても使うだけは使える。こんな簡単・単純なものでも重宝しそうだゼ。
そういや、歯医者に予約をいれたら土曜は駄目だと。大東京歯科大学病院は患者の都合なんて考慮してくれんのだなあ。地元の歯医者はヤブだし、まともな歯医者を探さないといかん。
にしても。1998年からまったく進歩のない記録に驚いてしまう。なんとかしないと向こう10年が、かなり、心配。…って、たぶん10年後も、なんとかしないと、とか言ってる自分が見えるようだ。うううむ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
亀有で納涼
ここんとこ体力的にもへとへとなんだけど、朝からビリー隊長の下、30分ほどのプログラムをこなし、午後から近場をぶらぶらと。
隣の亀有も金町に負けず劣らずディープな街でけっこう面白いのだ。…といいつつ、今日は駅前で納涼大会という噂をききつけ行ってみたしだい。
ついたのが5時前。まだちょうちんや屋台の準備中らしく、時間つぶしに漫画喫茶初体験。沈黙の艦隊はやっぱおもしれーっす。
時間になったんで、駅前の広場を覗いてみたら、テキヤ系じゃなくて町内会の手作り盆踊り。いろんな屋台であれこれ食うぞーっ!と出かけてきたのでこれでは食い足りなかった。(フランクとやきそばしかなかったんだよなぁ。手作り感はOKだけど、今回は我が家の目的と違ったのだった)
なもんで、北口のガード下の飲み屋。 かつしか地域づくりネット で評判の良い「備長扇屋」で黒ホッピー。メニューは焼き鳥各種、串揚げ各種のほか、レバカツがあった!このジャンクな味がビール(ホッピー)にはぴったりだ。
近場をのんびり徘徊するのが好きだったりするんだよねぇ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
夏物でも暑いものは暑い
今日は面接で渋谷へ。先日買った夏用のスーツだけど、ひたすら暑苦しいのは変わりないような気がする。場所柄か半裸のねえちゃんたちが本当にうらやましい。
んで、マンションの一室。大阪から単身赴任十ン年の東京本部長という肩書きのおじさんが面接官だ。いや気さくで大阪ローカルな話題もまじえてとても雰囲気のいい面接だった。
んだけど。仕事がちとスゴイ。
公官庁から資料をもらってきて、それをそのままコピペ割りつけしたオフセットのモノクロ雑誌というか新聞というか。同人誌でいうコピー誌なのだ。んでもってそれをダイレクトメールであちこちに送付して都合4回目に請求書を同封して、気に入ったら客になってもらう、というとても行き当たりばったり。どんな資料をセレクトするのかは、日経を良く読んで、らしい。
もう20年も続いてるのだけど、年々客も減って、特に近年はインターネットの影響で、と。そりゃ資料をまんま劣化コピー(グラフなどアミが潰れて見にくくなっている)じゃ、客も離れるよなぁ。予算もないらしいし、先の展望はどうなってるのか。いやあ、先が見えないですよ、と。
でも、今年一度業務縮小し、秋から立てなおしのために募集してるんだそうだ。インターネットでホームページを作って、100円程度で記事というか資料を見れるようにできればなぁ、と。
いい加減、ということでは人後に落ちないわたしがさすがにちょっと呆れてしまった。
こういうのもありだとは思うけど…もうすこし工夫と営業力が欲しいぞ。「会社」にしてしまえば、これでも成立しちゃうのがすげーなぁ。
暑さのあまり昼飯を食いそびれたのに気づいたのは地元駅に辿りついた時だった。食欲もなくぐったりだったなぁ。
晩飯がカレーだったのは助かったというか美味だった。自分で作っておいて辛い辛いと黙り込む嫁を前に、わたしはビフィーターに香菜を放りこんで堪能いたしましたです。ジンってパクチーだけじゃなくスパイス類が合いそうだ(って、ボンベイサファイヤは10種類のスパイスが入ってるんだよね)
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
今年初ウナギ
昨日はもう殺人的暴力的な39度。絶対うなぎを食ってやる、と思いつつ、昼メシに表に出ることすらうっとーしくてampmでサンドイッチと飲むヨーグルト。…なもんで、帰りにやるきを通りかかって目に入った「うなぎフェア」の文字についふらふらと。蒲焼を頼んで冷酒。うううむ、妙にきれいなウナギでインスタントな香りが漂ってた。パックに入ってレンチンか湯の中か。
なので、今日は会社の近くの、まぶしや、というところで昼飯、ウナ重680円なり。値段の割りにそこそこいい感じのうな重だったな。店がもう少し広くてゆっくりできる造りなら、ちょくちょく利用するんだけど。メシ時はせわしなかった。
とりあえず手もとの原稿をやっつける。明日は会議…なんかサンドバックの予感もヒシヒシと。
来週は体力勝負の忙しさになるな。ううむ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」