ソースコードは人を表す!? 機械学習を使い、96%の精度でコードから個人を識別することが可能に
■ このスレッドは過去ログ倉庫に格納されています
機械学習を用いると匿名のソースコードから個人を識別可能であることが判明
プログラミング言語を用いて書かれた「ソースコード」はあらかじめ定められた規則に従って記述する必要があり、
匿名で公開されたコードから個人を識別することは困難に思えるかもしれません。ところが、実際にはコードにも
個人の特徴が色濃く表れており、機械学習を用いてコードのサンプルから個人を識別できることが判明しました。
DEF CONR 26 Hacking Conference Speakers
https://www.defcon.org/html/defcon-26/dc-26-speakers.html#Greenstadt
Machine Learning Can Identify the Authors of Anonymous Code | WIRED
https://www.wired.com/story/machine-learning-identify-anonymous-code/
ドレクセル大学のコンピューターサイエンス准教授であるレイチェル・グリーンシュタット氏と、ジョージ・ワシントン大学で
コンピューターサイエンスの准教授を務めるアイリン・カルスキン氏は、プログラミング言語で書かれたコードは
完全に匿名のものではなく、機械学習を用いて個人を識別可能だという研究結果を発表しました。
2人は機械学習のアルゴリズムにコードサンプルを分析させ、用いた言葉の選択やコードの長さ、コードのまとめ方と
いったあらゆる特徴を抽出しました。次に2人は抽出された特徴の中から、開発者個人を識別するのに役立つ特徴のみを
選別し、コードから個人を特定する時に注目するべきリストを絞り込んだとのこと。コードの書き手は通常の文章と違い、
一定の規則に従ってコードを書き進めなければならないという制約がありますが、それでもコードから個人を識別可能な
特徴を抽出できるようです。
また、コードサンプルは非常に長いものである必要があるわけでもなく、グリーンシュタット氏らが発表した2017年の
論文(PDF)によればGitHubに公開されたほんの短いコードの断片であっても、特定の開発者とそれ以外の開発者を
識別できるとのこと。加えて、すでに0と1で表される機械語にコンパイルされたコードからでも、個人の識別が可能だと
カルスキン氏は述べました。
カルスキン氏らの研究チームは、Googleが開催するプログラミングコンテストのGoogle Code Jamで書かれたコードをもとに、
100人の開発者が書いたコードをアルゴリズムに識別させました。すると、実に96%の精度で個人を識別することが
できたとのこと。また、識別する開発者数を600人にまで拡大した場合でも、83%の精度で個人を識別できたとしています。
グリーンシュタット氏とカルスキン氏は、プログラミングを勉強する学生が他のコードを盗用したのかどうかを判断する場合や、
マルウェアの開発者を特定する時などにコードから個人を識別するAIが役立つとしています。また、関係のない第三者を
装って行われたサイバー犯罪に対しても、背後にいる人物の存在をあぶり出すことができるとのこと。
https://gigazine.net/news/20180813-machine-learning-identify-code-authors/ そーすは?
ソースは?
ってうるせーんだよ気違いが
ソースなんざ、中濃にきまってんだろ。 変数が女性の名前なプログラムをメンテした事がある。
あとflgAって変数名なのにカウンタだったりとか
死ねって思った いやでもマジ、ソースは人の心を写すよ
どんなに上辺繕ってもダメさ >>2
ソイソースか、ポン酢の2択だろ
とんかつ食うときでも中濃とかねーよ 上手い人のソースは本当にきれいだからな、思考に迷いが無いというか >>8
でも天才の書いたソースコードって理解できないよな。
なんでたったこれだけで動くねん。 自分が書いて、コメント入れてるのに、見返すとわからんわ >>1
奈倉か柏木だってわかるんだから、当たり前だろうが。
何を今更。 >>9
設計だろね、仕様書を噛み砕いてきれいに再構築するんよ
行き当たりばったで書く俺の生成物と違うのを知って、勝てないと思ったわ >>12
辞めた前任者の呪詛と性癖、旧作エロゲのネタが書いてあったときはワロタで。 C言語なのに1行80字以内に収めろって言われてビックリした お前らが自作自演したカキコミだって
クセがあってバレるよな そもそも新規よりも修正が多く
新規も似たようなシステムのプログラムを改変する形で作る俺は
前任者のコードに感化されやすくて困るわw
>>20
/*山本まんこみせい(`・д・´)*/
山本って昔居た可愛かった女事務
これにはワロタ ソースコードは知らんが文章である程度誰が書いたか
判別できるのと同じじゃあないのか。 >>21
些細なクセとかで「お前誰々だろう?」ってバレるよな これで動くかな?
この実装で大丈夫かな?
って感じで進めるので、
気付いたときには、行き当たりばったりの設計で、
後戻りできない状態になっている。 あーまー、これ、な。
社内のメンテナンスやってると、誰が書いたコードか分かる時あるわ。
なんとなく癖って言うか、変数の持たせ方とか、アルゴリズムとか、インデントとか、なんとなくな。
/* ここで時々エラーになるのって半分アベのせいだろ? */
これはわかるな。
考え方や、組み立て方に癖があるからな。 君、変な所で改行挟む癖あるよね
これすっげー見辛いからやめてくれる? 1,$s/\n//g
これで改行が消えてあっという間に読めないソースに。でもコンパイルはできるよ。 >>34
拾いからパクったソースの擦り合わせの箇所で無茶してる
なんてのが最近のお若いPGさんでは普通になってるよ
吸収できてないのがバレバレ /* ごめんちょっと自信ないからあとでチェックよろしく */ >>32
さーせん
うちviなんか使ってないもんで 5chのレスもいずれ個人識別可能になってしまう
匿名性の崩壊 まあハリーポッターの作者が別名で小説書いてたの機械学習で識別できたぐらいだからね
プログラムソースなら余裕でできるっしょ linuxなんか使った事無かったのに、vimのキーボードオペレーションが、ドキュメントを見なくてもスルスル使えた俺は、pdp11に繋がったダム端末からアセンブラコード打ち込んでた過去があった事を思い出した。 if (hoge) {
}
これ嫌いで
if (hoge)
{
}
これ >>43
その程度は現場によりなんでなんとも
スタイルチェックは大事 >>44
普通はあとからAstyleとか通して整形するよな 君、変なところで改行挟む癖あるよね
これすっげー見辛いからやめてくれる? 個人の特徴があるのはよくわかるんだけど
個人の中での恒常性はあるんかね
1年前のコードなんて別人も同然なんだが よくわからんけどソースコード流用するとき「俺ならこうは書かないなー」と思うのはよくある
暇なときに書き直してメンテしやすくしていくが >>43
そこはどうでもいいが、
} else if {
は許せん
デバッグで一時的にコメントアウトするときめんどくせーんだよ 厳密に文法が決まってなくてかなり自由だからな
それ故他人の書いたコードはクソ読みにくい 王様達のヴァイキングでこう言うシステムあったな
クラッカー探すやつ >>53
規則に統一性がない事も判断指標にされるんじゃないの 前の担当から引き継いだ会社のサイトのソースがぐっちゃぐちゃだった /* ○○お前が公認だと思っていた推薦したからな*/
だったら引き継ぎ位してから辞めろ >>55
会社のサイトのソースってHTMLっすか!!
貴重品ですからGifHubにすぐ登録して後悔してください!! 意外とCOBOLとかFORTRANは言語の硬さがあるから難解なのはないな 無理やりラムダ式使おうとして可読性悪い意味不明なコードになってるの見かけると初学者が覚えたての使いたかったんだなと実装者の心理が透けて見えて面白い 読みやすいコードと速いコードは
逆相関するからなぁ >>61
コメントのいっぱい書いてるソースはロクなのがないな 業務プログラムに変な拘り持ち込むのが困る。
他人が手を入れないフレームワーク作るような人なら良いけど。 東京から大阪に来た俺は
イカリのとんかつソースがお気に入り 口を開けばコーディングがどーのこーの今現在のトレンドはうんたら〜とか
言ってる奴が一番バグ出してる
あいつ会社から出ていってほしい >>17
なに?その人VGAの解像度でエディタ使ったりしてるの? 新宿古着屋ワタナベにそんなもの書けるわけないでしょうダイバクショウ
ヤフオクの表組さえ破綻してんですからダイバクショウ >>55
面白いね。動作結果も作った人の性格の影響出れば面白いんだけどな。 >>9
それは趣味の人が書いたプログラムではないかな?
メンテナンスを考えたら、後の人が理解しやすい記述を心がける。
例えば if( ( a=1 && b=1 ) || (c==1 && d==1) ) みたいに
中の括弧はプログラムでは効果ないけど、人は見やすい。 AI「変なところで改行挟んであるからあの派遣だわw」 正確な周期でポート操作する条件分岐入りのループなんてアセンブラででも書くもんじゃない
最近のMCUはパイプラインあるからNOPを使ってさえうまく調整できないんだ >>73
自社のコーティング規約だと&&もカッコで分離せんとあかんw
a=(2*3)+4; ←さすがにクドくね? >>75
アセンブラ必須のコードを書く時って、まずCで書いてコンパイルしてからコードを盗んだ方が効率よかったりするw
厄介なのはパイプラインにおける投機実行だね
条件分岐
命令 ←ここに来ない時も実行される >>75
パイプラインじゃなくてメモリのウェイト、キャッシュ、割り込みじゃね。
そも水晶クロックが不正確なので高精度な周期を得たいならGPSのパルスとかが必要だな。 >>76
算術加減算の優先順位はさすがに忘れないが、
論理演算の優先順位なんて覚えているプログラマーは少数派だ。 >>79
「そんくらい覚えてるだろ?」って人もいて、そーゆー人が謎のコード書くんで全部が全部ダメになったんだろなw
んで、QACとか言うコードチェッカーが義務付けられてて、1+2*3なんて書くと「カッコつけれや」ってエラー(ワーニング)になるw >>79
算数レベルならともかくドツボにはまるぐらいなら括弧つけた方が良いよね /*なぜかこれだとうまく行く。*/
これほど怖いコメントはない。 >>83
なぜ、そこでフラグをクリアしてるかわからない。
どう考えてもいらないと思うんだが削除は怖い、って処理は確かにあるw 変数名が困るわ
ボキャブラリー少ないからすぐ枯渇するわ >>86
カッコいいモジュール名決めるためだけに時間潰す自分がいるw >>73
まさか if文内でわざと代入してるわけじゃないよな >>86
グローバル変数でも無い限り、枯渇とかあり得ないから。 >>89
グローバル変数にはg_xxxx、ファイルの変数はf_xxxxてつけるよな
グローバル変数がiというソースは見たことあるけど >>89
アスペか
役割が全く違うけど適切だと思えるネーミングがバッティングする事なんてよく起こるわ
変数名というよりもクラス名だけど 「このソースコード…まさか、伝説の苺キンタマウイルスの作者か!?」 >>92
ネームスペース違うから普通はぶつからない。 ローカル変数がぶつかるって、複数の機能を一個の関数に詰め込んでる証拠だから。 次に直すときのために至るところにコメントが書いてあるけど途中で飽きて書かなくなってたら俺だ まぁそうだろうな。変数の名前やコメントの書き方だけで識別できそうな気がする >>76
そんなこと言い出したら
「=」だって代入演算子なわけだから
a=((2*3)+4); って書かなきゃ
規則の整合性が取れなくなるぜ >>17
Linuxのコーディングスタイルだからな
採用してるところは多そう >>100
昔のFORTRANを紙カードで書いてた時代の名残なんだろな >>99
そっちが推奨されてるけど、コードチェッカーに引っかからないんで流石にスルーしてるw 論理演算子やビット演算子の優先順位や結合性は
言語や時代、コンパイラによって異なるモノまであるんだから計算意図を明確にするなんて当然やで 不要なカッコを禁止している規約があって、呆れた思い出。
return (hoge);
がダメ、当然、
#define BAD_CASE (-1);
もダメ。
ああ、副作用怖く無いんだろうなぁ >>49
なるほど
それで記述してたから直すわ
といっても、趣味だから誰もソースなんて見ないけど ホントはすっごい癖あんのに披露しちゃうと特定されてるから
黙ってるだろそこのお前m9(`・ω・´) >>104
「不要では無い」を主張して規約を変えさせれば良いじゃん。
例示は要ると思うけど。 >>104
関数呼び出しと間違えるから?
retrun(hoge); あ、#defineの最後って、セミコロン必要だっけ? >>111
いらないよ
確認するのに昔書いたc++のソース引っ張り出したけど酷いなコレ >>83
else if節で何故か異常動作してて
elseで改行して次行からif文書くと何故か上手く動いた事があって
なんでそれで上手く行くのかさっぱりわからないから
コメントに「変更しちゃダメ!」って書いておいたw >>115
デバッガでアセンブルコードを表示して、両方を比べると差があるかもだね。
組み込み制御だとユーザー数が少ないからなのかコンパイラのバグ情報が結構あって、これが定期的に流れてくる。
多くは最適化のバグ。
なので、規約で最適化なしか(速度容量的に無理なら)最低にする事になってる。 >>9
Tomohiko Sakamoto algorithmとかね。 >>116
ガラパゴスCPU使ってるからだろ。
ARM使えよ。 >>120
コアがARMのSOC多くね?
バグはチップと言うより開発環境によるけど。 >>121
ARMならメジャーなコンパイル環境幾らでもあんぞ。 >>122
商売だと会社指定になるんで選べない。
それと、メジャーコンパイラにもバグ情報結構あって、サポート契約してると流れてくるよ。
コンパイラが何がしらのバージョンアップする理由のひとつだね。 >>122
サポート契約してるとチェッカーが入手できるんだけど、これかけるとバグになるパターンが警告される。
当たり前のパターンはテストされつくしてるからコーティング規約がしっかりしてればエラーにはならない。
「そんな書き方するかよ」ってコードが対象だね。 >>121
ARMはプロセッサの設計情報売りしてるからな。
SoC製造各社それ買って独自の周辺機能付けて…ってやってるから。 >>125
だね。
使ってるCPU(Soc)はJADEとかEmerldとかRcarなんだけど、コアは全部ARMだったりする。 ■ このスレッドは過去ログ倉庫に格納されています