ここで具体的な作成コードを書いてしまうと、せっかくの暗号が解読されてしまうので、アルゴリズムのアイデアのみを回答することにします。
よくある方法としては、ハッシュ関数を使います。
たとえば、年月日時分(文字列)とプログラム固有の文字列(クライアントプログラムのファイルサイズやMD5値)を結合し、SHA-1などのハッシュ関数でハッシュ値を計算し、これを認証キーとします。
サーバ側のPHPでも同様の方法でハッシュ値を計算し、クライアントから送られてきた認証キーと合致すれば認証成功とします。
SHA-1以外のハッシュ関数もあるので、適当に選んで使ってみてください。
Objective-CでSHA-1を計算するにはCC_SHA1を使います。
PHPでは、sha1関数が用意されています。
(1)サーバー側にて使い捨てのトークンを発行
(2)端末側で保存してあるパスワード等とトークンを利用して認証フレーズを作成、送信する
(3)サーバー側でも、同じ様にパスワード等とトークンを利用して認証フレーズを作成し、受信した認証フレーズと照合する
この方法では、サーバー・端末の時刻同期の必要がなく、トークンを使い捨てにすることにより確実に1度だけ認証処理が行うことが可能です。
常に一定の暗号では気づかれてしまうため
こちらが、どのような想定かで全ての動作が無意味になってしまいます。
例えば、認証コードが固定かつ通信中のパケットを拾えてしまえば意味が無い物になります。
また、サーバーや端末側から仕様が解析されてしまった場合も同様です。
通信についてはSSLを利用する必要があるかもしれません。
libcurlをiPhoneアプリからつかう方法 (ついでにopensslも) | tech.kayac.com - KAYAC engineers’ blog