mojavy.com

Quicklinks 6

June 15, 2013 at 11:20 PM | categories: quicklinks |

leaf

最近道端の植物を観察するのがマイブームです。 写真は六本木ヒルズにあるミニ庭園っぽいとこに植えてあった草。名前はわからない。 おもしろい植物があってもなかなか名前を同定するところまで到達できないのがつらいところ。

Go

最近まわりで評判がよくて久々試してみたら思いの外よかったので真面目にやってみようかという気になりました。 勝手なイメージでは、ErlangとCとJavascriptのいいとこ取りしてる感じ。

Race Detectorなんてものもあるらしい。すごい。

TRICK 2013

これに入賞するにはプログラミングスキルだけじゃなくてセンスと教養と変態性が必要だと感じました。

電王戦

人同士が対戦してるのを見るのは別のおもしろさがあるので人間が負けたからといってどうということもないとは思いますが、 実際コンピュータが勝ってしまうとちょっと寂しくも感じてしまいますね。

ちなみに将棋の探索木データは一部公開されているようです。 今のところ使い道は特に思いうかびませんが、こういうものの存在を覚えておくとAIとかを書きたくなったときとかに参考にできるかも。

ternjs

IDEでのJavaやC#みたいなインテリジェントなエディタサポートをJavascriptでもできるようにするためのものです。普通に便利ですね。

Xbox One, PS4

もはやぱっと見では実写と見分けがつかないです。

Haswell

何やらおもしろそうな新機能が導入されたようです。

NSAのリークの話

一個人が天下のアンクル・サムさんに喧嘩を売るという映画のような展開で野次馬せずにはいられません。



暗号利用モードについて

June 12, 2013 at 08:36 AM | categories: security |

AESを使おうと思ったけどどの暗号利用モードをつかえばいいかわからなかったので調べたことをまとめておきます。

暗号利用モードとは

Wikipedia/暗号利用モード

暗号利用モード(あんごうりようモード、Block cipher modes of operation)とは、ブロック暗号を利用して、ブロック長よりも長いメッセージを暗号化するメカニズムのことである。
ECBモード(単純なブロック暗号の利用法)では、ある鍵で同一の平文を暗号化すると、同一の暗号文になる。したがって、長いメッセージ(画像データなど)のある部分が他の部分と同じであるかどうかが、暗号文の比較によって判断できてしまうので、他のモードが必要となった。
暗号利用モードには、秘匿用の利用モードと、認証用の利用モードとがある。

秘匿用利用モード

Wikipediaの図 も参考にするとわかりやすい。 以下は概要だけ。

ECB

各ブロックを単純に一つずつ処理するだけ。暗号が一致したブロックは復号した平文も一致する。 1つ以上のブロックを単一のパスワードで暗号化するのであれば使うべきではない。

CBC

直前の暗号テキストブロックを次の平文テキストブロックにXORしてからブロック暗号処理することを繰り返す。 最初のブロックはIV(Initialization Vector)をつかって暗号化する。

暗号化は前から順番にする必要があるが、複合は1つ前のブロック前が分かればできるので並列化が可能。

CFB

CBCと似ているが、直前の暗号テキストブロックを再度ブロック暗号処理したものに次の平文テキストブロックをXORしたものを暗号テキストとする。 最初のブロックはIVだけブロック暗号処理してXORする。 CBCとはXORのタイミングが違うだけ。

特徴もCBCと同じで、暗号化処理は並列化できないが複合は可能。

OFB

IVを繰り返しブロック暗号処理したものにそれぞれ平文ブロックをXORしていったものを暗号テキストとする。 すべての操作で直前のものが必要となるので暗号化・復号の両方とも並列化はできないが、IVのブロック暗号処理は事前に計算することができる。

CTR (ICM, SIC)

OFBに似ているが、IVではなくカウンターの値をインクリメントしつつブロック暗号処理したものに平文ブロックをXORする。 カウンターは十分に長い間繰り返しが発生しない一意な値を出力する任意の関数であれば何でもよいが、単に1ずつ増やすカウンターを使うことが多い。

暗号・復号いずれも並列化が可能だが、入力に決定的な値を使うことについては議論の余地がある。

ディスク用のもの

ディスクを暗号化するには特別な考慮が必要になるため専用のものがいくつか存在する。

  • LRW
  • XEX
  • XTS
  • CMC

参考

認証用の利用モード

秘匿化とあわせて認証とデータの完全性を保証するためのモード。 通常はMAC(Massage Authentication Code, authentication tag)を組みあわせることで実現する。

その他

  • 上記では触れなかったが、並列化できるかどうかの他にもエラー検出が可能かどうかや組み合わせて使用するブロック暗号化方式の特徴なども考慮して選択する必要がある
  • 特許になっているものも多いので使用する際は要確認
  • mysqlのaes_encrypt()ではECBをつかっているのでセキュリティ強度的にはあまりよろしくない

参考



Mach-Oバイナリのライブラリロードパスをカスタマイズする方法

May 17, 2013 at 07:46 PM | categories: osx, unix, elf, mach-o |

matrix

ライブラリの単体テストをするときとかに、実行プログラムがロードする共有ライブラリのパスを任意のディレクトリで上書きしたいときがある。

例えば以下のようなディレクトリ構成で、project/t/mytestというバイナリをビルドするときにproject/src/libmy.soをリンクするようにしておけば作業しやすい。

└── project
    ├── src
    │   ├── libmy.a
    │   ├── libmy.so -> libmy.so.1
    │   ├── libmy.so.1
    │   ├── Makefile
    │   ├── mylib.c
    │   ├── mylib.h
    │   └── mylib.o
    └── t
        ├── Makefile
        ├── mytest
        ├── mytest.c
        └── mytest.o

こういうときは、mytestをビルドするときに以下のようにしてrpathを相対パスで追加していた。

$ cc -I../src -L../src -Wl,-rpath=../src *.c -lmy -o mytest
$ readelf -d mytest
Dynamic section at offset 0xe30 contains 22 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libmy.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000f (RPATH)              Library rpath: [../src]
 0x000000000000000c (INIT)               0x4004c8
 0x000000000000000d (FINI)               0x4006f8
 0x000000006ffffef5 (GNU_HASH)           0x400298
 0x0000000000000005 (STRTAB)             0x4003c0
 0x0000000000000006 (SYMTAB)             0x4002d0
 0x000000000000000a (STRSZ)              134 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x600fe8
 0x0000000000000002 (PLTRELSZ)           48 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x400498
 0x0000000000000007 (RELA)               0x400480
 0x0000000000000008 (RELASZ)             24 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffffe (VERNEED)            0x400460
 0x000000006fffffff (VERNEEDNUM)         1
 0x000000006ffffff0 (VERSYM)             0x400446
 0x0000000000000000 (NULL)               0x0

しかし、OSXの場合は上記のように単に実行バイナリ側にrpathを追加しただけだと、ローダがrpathを設定するコマンドより先にライブラリをロードするコマンドを実行しようとして該当ファイルがみつけられなくて以下のようなエラーになってしまう.

dyld: Library not loaded: libmy.1.dylib
  Referenced from: /Users/path/to/project/t/./mytest
  Reason: image not found
zsh: trace trap  ./mytest

otool -l <executable file>でロードコマンドの詳細をみると以下のようなエントリがみつかるが、ここのnameの値はライブラリ側のinstall_pathが設定される。

-- 中略
Load command 11
          cmd LC_LOAD_DYLIB
      cmdsize 40
         name libmy.1.dylib (offset 24)
   time stamp 2 Thu Jan  1 09:00:02 1970
      current version 1.0.0
compatibility version 0.0.0

install_pathsonameのかわりのようなもので、なにも指定しなければ出力ファイル名になる。 ここに@executable_path@rpathをつかうことによって、このダイナミックライブラリをリンクする側のバイナリに応じて挙動をかえることができる。 これらの変数(?)の詳細は参考リンクに解説がある。

要は、ELFのrpathとおなじような挙動にしたければ、 -Wl,-install_name,@rpath/libmy.1.dylib というようなオプション付きでライブラリをビルドすればよい。

また、-Wl,-install_name,@executable_path/../src/libmy.1.dylibのようにすると実行ファイルからの相対パスにすることができる。

この情報はリンクされる側のライブラリに埋めこまれている点に注意。

ELFに比べると柔軟にロードパスを制御することができると思われるが、うまく活用するのはちょっと難しそう。

参考リンク



ワイヤレスなRaspberry Pi環境をつくる

April 28, 2013 at 01:54 AM | categories: raspberry pi |

raspberry

Raspberry Pi遊ぶからにはその小ささを生かしたことがしたいですよね。 というわけで手始めにワイヤレス化しました。手順は非常に簡単で、ほぼAmazonで買ったパーツを差すだけで達成できました。

Raspberry Piを標準的な構成でうごかすとLANケーブル、電源、 キーボード、ディスプレイの4本コードがのびることになりますが、sshで接続できればディスプレイもキーボードも不要なのであと必要なのはネットワーク環境と電源だけです。

電源は 5V 700mA なので、普通のスマートフォン用バッテリーがそのまま使えます。 5V 700mAを越えていれば何でもいいと思いますが、今回は以下をつかいました。


ネットワークはUSBの無線LAN受信機を使います。 これも何でもいいと思いますが、あまり最新のモデルだとドライバが対応してないかもしれないのでちょっと古めのもののほうが無難です。以下の商品は問題なく動きました。

wifiの設定はX Windowの設定画面からしました。startxでデスクトップを起動するとWiFi Configというアイコンがあるのでそこから設定できます。 ターミナルでifconfigを実行してwlan0にinet addrが割り当てられていることを確認できればOKです。

pi@raspberrypi ~ $ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:90:32:15
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1104 (1.0 KiB)  TX bytes:1104 (1.0 KiB)

wlan0     Link encap:Ethernet  HWaddr 10:6f:3f:ec:5f:b8
          inet addr:192.168.1.13  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4285 errors:0 dropped:0 overruns:0 frame:0
          TX packets:673 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:937903 (915.9 KiB)  TX bytes:81630 (79.7 KiB)

ここで確認したIPアドレスにsshしてつながれば完了です。



Raspberry Pi はじめました

April 28, 2013 at 01:30 AM | categories: raspberry pi |

raspberry

前々から気になってたRaspberry Piを手に入れました。

最終的にはセンサーとかいろいろつけてインタラクティブなおもちゃをつくりたいですが、当面の目標は秋月電子で調達してきたLCDディスプレイに文字を表示させるためのドライバを書くことにしようと思います。

Raspberry Piのセットアップ手順はぐぐればすぐでてくるので割愛しますが、そのままだとsdcardの空き領域がつかえないので起動時にマウントできるようにするまでの手順だけメモしときます。

pi@raspberrypi ~ $ sudo fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 31.7 GB, 31674335232 bytes
4 heads, 16 sectors/track, 966624 cylinders, total 61863936 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00014d34

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880     3788799     1832960   83  Linux

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 3):
Using default value 3
First sector (2048-61863935, default 2048): 3788800
Last sector, +sectors or +size{K,M,G} (3788800-61863935, default 61863935):
Using default value 61863935

Command (m for help): p

Disk /dev/mmcblk0: 31.7 GB, 31674335232 bytes
4 heads, 16 sectors/track, 966624 cylinders, total 61863936 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00014d34

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880     3788799     1832960   83  Linux
/dev/mmcblk0p3         3788800    61863935    29037568   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

pi@raspberrypi ~ $ sudo mkfs.ext4 /dev/mmcblk0p3
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1815072 inodes, 7259392 blocks
362969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
222 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information: done

上記のように、fdiskでパーティションをきってrebootしたあと、mkfs.ext4でフォーマットします。 最後に/etc/fstabに以下を追記してもう一度再起動して完了です。 マウントするディレクトリ(以下だと/home)は適当にかえてください。/homeにマウントする場合はpiユーザのホームディレクトリをコピーしておくといいと思います。

/dev/mmcblk0p3 /home            ext4    defaults,noatime  0       2
pi@raspberrypi ~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          1.8G  1.4G  246M  86% /
/dev/root       1.8G  1.4G  246M  86% /
devtmpfs        212M     0  212M   0% /dev
tmpfs            44M  276K   44M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            88M     0   88M   0% /run/shm
/dev/mmcblk0p1   56M   19M   38M  34% /boot
/dev/mmcblk0p3   28G  172M   26G   1% /home


About Me

pic
mojavy

Recent posts






Categories



Badges